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

C# SqlException:System.Data.SqlClient.SqlException(0x80131904),c#,sql-server-2008,sql-server-2005,named-pipes,sqlexception,C#,Sql Server 2008,Sql Server 2005,Named Pipes,Sqlexception,我用C#编写了一个代码,它在我的电脑上运行得很好,在Windows7(MSSQLServer2008)上运行得很好,但在WindowsVista(MSSQLServer2005)上运行得不好。我无法更改第二台计算机上的系统;)我正在使用VisualStudio2010 这是我的类“obSQL”中的代码部分: 它在我的电脑上工作得很好(SQLServer2008)。但是,当我在另一台(SQL Server 2005)上运行相同的代码时,出现了一个错误(部分代码是其他语言的,因此我为您翻译了它):

我用C#编写了一个代码,它在我的电脑上运行得很好,在Windows7(MSSQLServer2008)上运行得很好,但在WindowsVista(MSSQLServer2005)上运行得不好。我无法更改第二台计算机上的系统;)我正在使用VisualStudio2010

这是我的类“obSQL”中的代码部分:

它在我的电脑上工作得很好(SQLServer2008)。但是,当我在另一台(SQL Server 2005)上运行相同的代码时,出现了一个错误(部分代码是其他语言的,因此我为您翻译了它):

错误SqlException:System.Data.SqlClient.SqlException(0x80131904):错误网络或连接到SQL Server时发生错误。找不到服务器或服务器不可用。验证实例名称是否正确,以及SQL Server的配置是否允许远程连接。(提供程序:命名管道提供程序,错误:40-无法打开到SQL Server的连接) 位于System.Data.SqlClient.SqlInternalConnection.OneError(SqlException异常,布尔断开连接) 位于System.Data.SqlClient.TdsParser.throweexception和warning()处 在System.Data.SqlClient.TdsParser.Connect(ServerInfo ServerInfo、sqlinternalconnectionds connHandler、Boolean ignoresnopentimeout、Int64 timerExpire、Boolean encrypt、Boolean trustServerCert、Boolean integratedSecurity) 位于System.Data.SqlClient.SqlInternalConnectionDS.AttemptOneLogin(ServerInfo ServerInfo、字符串newPassword、布尔值IgnoresInOpenTimeout、TimeoutTimer timeout、SqlConnection owningObject) 位于System.Data.SqlClient.SqlInternalConnectionDS.LoginOfAliver(ServerInfo服务器信息、字符串newPassword、Boolean redirectedUserInstance、SqlConnectionOwningObject、SqlConnectionString连接选项、超时超时) 位于System.Data.SqlClient.SqlInternalConnectionDS.OpenLoginList(SqlConnection owningObject、TimeoutTimer timeout、SqlConnectionString connectionOptions、String newPassword、Boolean redirectedUserInstance) 位于System.Data.SqlClient.SqlInternalConnectionDS..ctor(DbConnectionPoolIdentity、SqlConnectionString connectionOptions、Object providerInfo、String newPassword、SqlConnection owningObject、Boolean redirectedUserInstance) 位于System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项、对象池组ProviderInfo、DbConnectionPool池、DbConnection所有者连接) 位于System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection所有者连接、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()处 在cennik01.obSQL..ctor(字符串用户、字符串传递、字符串实例、字符串dbdir) 在Cennik_v2._1.表单1.按钮1_单击(对象发送者,事件参数e)

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


所以。。。我能做什么?

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


CodePlex上有一个开源程序,你可以下载来测试连接字符串等。这将有助于您确定问题所在。

在我看来,在连接字符串中,您是通过机器名调用服务器的,而SQL server没有使用命名管道启用。问题的解决方案是:在SQL Server配置中启用命名管道,或者在连接字符串中提供SQL Server的IP地址而不是名称

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();
    }