我在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,实例,用户名和密码。
那么......我该怎么办?
答案 0 :(得分:3)
此错误不是登录问题。这不是无效凭证的问题。您将收到不同的错误消息。此错误消息仅表示它无法找到服务器(可能)或连接字符串中的数据库。
CodePlex上有一个开源程序,您可以下载它来测试连接字符串等You can find it here。这可以帮助您确定问题的位置/内容。
答案 1 :(得分:0)
对我而言,在连接字符串中,您通过计算机名称调用服务器,而SQL服务器未启用命名管道。该问题的解决方案是:在SQL Server配置中启用命名管道,或者在连接字符串中提供SQL Server的IP地址而不是名称。