0

我使用带有本地数据库(mdf)的.net webservice。在我将所有文件按原样移动到另一台计算机并在 iis 上创建一个新应用程序之前,这个所有网站都运行良好。这个网络服务上的所有方法都工作得很好,只是需要连接和查询数据库的方法我得到以下错误:

System.Data.SqlClient.SqlException: 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.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()
   at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.ElementAt[TSource](IQueryable`1 source, Int32 index)

我更改了几次 Web 配置连接字符串,但没有防火墙保护。

谢谢...

4

3 回答 3

3

如果您使用的是 MDF 文件,则必须在原始计算机上安装 SQL Server 或 SQL Server Express。

正如您所说,您已将文件移动到另一台计算机上,您的配置显然不再有效。您必须调整所有路径信息以适应新的安装文件夹。

此外,您必须确保新计算机上有一个正在运行的 SQL Server 或 SQL Server Express 实例,并使其指向 MDF 数据库文件。

于 2012-11-27T12:29:47.003 回答
3

MDF 是标准的 SQL Server 扩展,并且您使用 SqlClient 进行连接,因此您肯定使用的是 SQL Server,但您连接的是本地数据库 (MDF) 文件,而不是实际的 SQL Server 服务。

  • 确保运行 Web 应用程序的帐户有权访问 MDF 文件。

  • 绝对确定连接字符串是连接的。至少把它贴在这里,这样我们就可以提供帮助。

  • 要开始进行故障排除,请暂时授予每个人组对 MDF 文件的访问权限,看看是否有帮助。

于 2012-11-27T12:36:17.683 回答
1

我建议进行一些基础设施检查,有时比只关注代码更好:

  1. 确保您的 SQL 服务器具有正确的 LAN 连接
  2. 从托管 Web 服务的服务器向托管 SQL Server 的服务器执行 ping 操作
  3. 使用 MAnagement Studio 从不同的服务器查询数据库对象(可能是网络管理员无意中阻止了重要端口)

如果可能的话,检查两次你的连接字符串,有时分号会毁掉整个事情。

编辑

连接字符串

<add name="gatewayConnectionString" 
connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=c:\Projects\p\file.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" 
providerName="System.Data.SqlClient"/> 

希望能帮助到你,

于 2012-11-27T12:10:35.757 回答