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

时间:2013-08-05 10:57:39

标签: c# sql-server-2008 sql-server-2005 named-pipes sqlexception

我在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时网络或发生错误。无法找到服务器或无法使用。验证实例名称是否正确以及SQL Server的配置是否允许远程连接。 (提供商:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)      在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection)      在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()      在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,TimeoutTimer timeout,SqlConnection owningObject)      在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)      在System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity标识,SqlConnectionString connectionOptions,Object providerInfo,String newPassword,SqlConnection owningObject,Boolean redirectedUserInstance)      在System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection)      在System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool池,DbConnectionOptions选项)      在System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)      在System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)      在System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)      在System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)      在System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)      在System.Data.SqlClient.SqlConnection.Open()      at cennik01.obSQL..ctor(String user,String pass,String instance,String dbdir)      at Cennik_v2._1.Form1.button1_Click(Object sender,EventArgs e)

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

那么......我该怎么办?

2 个答案:

答案 0 :(得分:3)

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

CodePlex上有一个开源程序,您可以下载它来测试连接字符串等You can find it here。这可以帮助您确定问题的位置/内容。

答案 1 :(得分:0)

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