SqlException:System.Data.SqlClient.SqlException(0x80131904)

我在C#中编写了一个代码,它在我的计算机上运行得很好,使用Windows 7(MS SQL Server 2008)但在Windows Vista(MS SQL Server 2005)中却没有。 我无法在第二台计算机上更改系统;)我正在使用Visual Studio 2010。

所以这是代码的一部分,来自我的类​​“obSQL”:

private SqlConnection connection; public obSQL(string user, string pass, string instance, string dbdir) //sql server authentication { connection = new SqlConnection(); connection.ConnectionString = "user id=" + user + ";" + "password=" + pass + ";Data Source=" + instance + ";" + "Trusted_Connection=no;" + "database=" + dbdir + "; " + "connection timeout=3"; //more at http://www.connectionstrings.com/ connection.Open(); } public obSQL(string instance, string dbdir) //windows authentication { connection = new SqlConnection(); connection.ConnectionString = "Data Source=" + instance + ";" + "Trusted_Connection=yes;" + "database=" + dbdir + "; " + "connection timeout=3"; connection.Open(); } 

它在我的计算机上运行良好(SQL Server 2008)。 但是,当我在另一个(SQL Server 2005)上运行相同的代码然后发生错误(其中一部分是其他语言,所以我为你翻译):

错误SqlException: System.Data.SqlClient.SqlException(0x80131904) :错误连接到SQL Server时网络或发生错误。 无法找到服务器或无法使用。 validation实例名称是否正确以及SQL Server的配置是否允许远程连接。 (提供程序: 命名管道提供程序,错误:40 – 无法打开到SQL Server的连接 )在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()处的System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception,布尔breakConnection)处System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo,SqlInternalConnectionTds connHandler,Boolean ignoreSniOpenTimeout,Int64 timerExpire,Boolean encrypt,Boolean trustServerCert,Boolean integratedSecurity),位于System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,String newPassword,Boolean ignoreSniOpenTimeout) System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,String newPassword,Boolean redirectedUserInstance,SqlConnection owningObject,SqlConnectionString connectionOptions,TimeoutTimer timeout)中的,TimeoutTimer超时,SqlConnection owningObject) TimeoutTi 在System.Data.SqlClient.SqlConnectionFactory处的System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity标识,SqlConnectionString connectionOptions,Object providerInfo,String newPassword,SqlConnection owningObject,Boolean redirectedUserInstance)中的mer timeout,SqlConnectionString connectionOptions,String newPassword,Boolean redirectedUserInstance) .CreateConnection(DbConnectionOptions选项,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection)位于System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)的System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool池,DbConnectionOptions选项)处。 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection)上System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)的System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 在System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)的System.Data.SqlClient.SqlConnection.Open()处于cennik01.obSQL..ctor(字符串用户,字符串传递,字符串实例,字符串dbdir)中的owningConnection) )在Cennik_v2._1.Form1.button1_Click(Object sender,EventArgs e)

当我运行使用相同数据库的其他程序时它正确连接,所以我认为登录等是正确的…我希望:)但是这第二个程序是商业的,所以我没有它的源代码,我只给他我的dbdir,实例,用户名和密码。

那么……我该怎么办?

此错误不是登录问题。 这不是无效凭证的问题。 你会得到一个不同的错误信息。 此错误消息仅表示它无法找到服务器(可能)或连接字符串中的数据库。

您可以下载CodePlex上的开源程序来测试连接字符串等。 您可以在此处找到它 。 这应该可以帮助您确定问题的位置/内容。

对我而言,在连接字符串中,您通过计算机名称调用服务器,而SQL服务器未启用命名管道。 该问题的解决方案是:在SQL Server配置中启用命名管道,或者在连接字符串中提供SQL Server的IP地址而不是名称。