我一直在寻找,但无法提出有效的解决方案。
作为C#的中介,以及HTML和其他东西的得体,我以为我会愚弄Razor Web Pages并创建一个简单的网站。我希望创建一个数据库,其中包含每个页面的所有标题和描述的列表。然后,我可以轻松地更改所有实例和对每个html文件的引用以保持DRY。但是,除了从SQL表中获取异常外,我似乎什么也没得到。
我尝试使用Visual Studio 2015进行以下操作:
将connectionStrings添加到Web.config
<connectionStrings>
<add name="Database" connectionString="Data Source=|DataDirectory|\Database.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
创建default.cshtml
@using WebMatrix.Data
@using System.Data.SqlClient
<Html><body> etc...
@{
var db = Database.Open("Database");
try
{
db.Query("SELECT * FROM Table");
}
catch (SqlException odbcEx)
{
System.Diagnostics.Debug.WriteLine("It is an Exception: " + odbcEx);
}
}
</body><Html>
在Microsoft Edge中运行
大约10秒钟后,该网站将显示在localhost上。但是表中有结果,输出中只有一个例外:
It is an Exception: System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at WebMatrix.Data.Database.EnsureConnectionOpen()
at WebMatrix.Data.Database.<QueryInternal>d__0.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at WebMatrix.Data.Database.Query(String commandText, Object[] parameters)
at ASP._Page_Default_cshtml.Execute() in c:\Users\Person\OneDrive\Documents\Website\Default.cshtml:line 29
我在网上搜索后发现,由于WebMatrix已过时,因此针对Visual Studio的解决方案并不多。据我所知,Razor目前似乎并未得到广泛使用。
我尝试将connectionStrings更改为一些不同的东西,但是没有运气。我怎样才能使它正常工作?
我相信问题出在您的连接字符串上。连接字符串需要指定一个SQL Server。在这种情况下,您刚刚指定了文件路径。您需要一个数据库服务器才能实际提供该mdf文件。
这个SO问题应该向您展示如何从现有的服务器资源管理器连接中获取连接字符串:
然后,您可以在已连接服务器的属性中看到连接字符串(选择连接,然后按F4或Alt + Enter或在右键菜单上选择“属性”)。
这是为什么您当前的连接字符串可能无法按预期方式工作的说明:
当您通过服务器资源管理器“连接”到mdf文件时,很可能是使用LocalDb。LocalDb是Visual Studio附带的按需服务,使您可以轻松地开发应用程序(就像您尝试做的那样),而无需运行Sql Server的完整实例。
不幸的是,目前我还没有一个带有附加的mdf文件的正在运行的示例,但是我相信类似的事情将为您完成工作,我从MSDN的有关连接字符串的文章中获取了此字符串。
<add name="ConnectionStringName"
providerName="System.Data.SqlClient"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;InitialCatalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True" />
这里有几个重要的方面:
Data Source=(LocalDB)\v11.0
-这指定了要使用的按需启动localdb实例。请注意,v11.0
此字符串中的版本因安装而异,因此您应该为字符串找到正确的版本。(您应该可以在下面找到它更容易)AttachDbFilename=|DataDirectory|\DatabaseFilename.mdf
-这告诉LocalDb加载该数据库文件。或者,localdb将数据库文件保留在用户主目录或AppData目录中的某个位置。Integrated Security=true
-连接字符串需要身份验证方案。集成安全性是两个可能的选项,它使用Windows凭据来尝试访问数据库,这在许多方面都可以很好地工作,LocalDb就是其中之一。另一个选择是使用sql身份验证以及sql名称和密码进行连接。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句