3 votes

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

J'ai écrit un code en C#, qui fonctionne très bien sur mon ordinateur, avec Windows 7 (MS SQL Server 2008) mais pas sur l'autre avec Windows Vista (MS SQL Server 2005). Je ne peux pas changer de système sur le deuxième ordinateur ;) J'utilise Visual Studio 2010.

Voici donc la partie du code, de ma classe "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();
    }

Il fonctionne parfaitement sur mon ordinateur (SQL Server 2008). Mais lorsque j'exécute le même code sur l'autre ordinateur (SQL Server 2005), une erreur survient (une partie de cette erreur est dans une autre langue, je l'ai donc traduite pour vous) :

Erreur SqlException : System.Data.SqlClient.SqlException (0x80131904) : Erreur Une erreur s'est produite avec le réseau ou l'occurrence lors de la connexion à SQL Server. Impossible de trouver le serveur ou il n'est pas disponible. Vérifiez que le nom de l'instance est correct et que la configuration de SQL Server autorise les connexions à distance. (fournisseur : Named Pipes Provider, erreur : 40 - Impossible d'ouvrir une connexion à SQL Server ) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) à 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) à Sy at cennik01.obSQL..ctor(String user, String pass, String instance, String dbdir) at Cennik_v2._1.Form1.button1_Click(Object sender, EventArgs e)

Lorsque je lance un autre programme qui utilise la même base de données, il se connecte correctement, donc je pense que le login etc. est correct... J'espère :) Mais ce deuxième programme est commercial, donc je n'ai pas son code source, je lui donne seulement mon dbdir, instance, nom d'utilisateur et mot de passe.

Alors... qu'est-ce que je peux faire ?

5voto

Randy Minder Points 19262

Cette erreur n'est pas un problème de connexion. Il ne s'agit pas d'informations d'identification non valides. Vous obtiendrez un message d'erreur différent pour cela. Ce message d'erreur signifie simplement qu'il ne peut trouver ni le serveur (probablement) ni la base de données dans la chaîne de connexion.

Il existe un programme open source sur CodePlex que vous pouvez télécharger pour tester la chaîne de connexion, etc. Vous pouvez le trouver ici . Cela devrait vous aider à déterminer où/qu'elle est le problème.

0voto

Anil Points 1

Pour moi, il semble que dans la chaîne de connexion, vous appelez votre serveur par le nom de la machine et le serveur SQL n'est pas activé avec Named Pipes. La solution au problème est la suivante : soit vous activez les tubes nommés dans la configuration du serveur SQL, soit dans la chaîne de connexion vous fournissez l'adresse IP du serveur SQL au lieu du nom.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X