连接到没有SQL Server的数据库mdf

时间:2012-11-27 12:02:00

标签: .net sql-server database

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

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配置连接字符串,并且没有防火墙保护。

感谢...

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

  • 确保连接字符串是连接的。至少在此发布,以便我们提供帮助。

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

答案 2 :(得分:1)

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

  1. 确保您的SQL服务器具有正确的LAN连接
  2. 从托管您的Web服务的服务器ping到托管SQL Server的服务器
  3. 使用MAnagement Studio从其他服务器查询数据库对象(网络管理员可能无意中阻止了重要端口)
  4. 如果可能,请检查连接字符串的两倍,有时分号会毁掉整个连接字符串。

    修改

    连接字符串

    <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"/> 
    

    希望它有所帮助,