IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#][ODBC][SQLServer2005] Erreur d'authentification


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut [C#][ODBC][SQLServer2005] Erreur d'authentification
    Bonjour à tous,

    J'ai eu le grand plaisir récemment de passer du cobol et de db2 à .NET avec du SQLServer. Appréciez le grand écart générationnel.

    Voici mon problème :
    Dans mon projet C#, j'ai une classe plaquette qui doit se connecter à la base de données sqlServer.

    Pour ce faire, j'ai :
    - paramétré des liens odbc vers les tables itou itou (suite à la lecture de certains topics sur ce meme forum)
    - codé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    string Scnx = "Driver=SQL Server;Server=DNS_SERVER\\INSTANCE3;uid=monUIDspecialBDD;Trusted_connection=yes; pwd=monMegaPWD;dbq=CNC1_TARIF_NI;";
     
    try
    {
     // OdbcCommand CNC1_Cmd = new OdbcCommand(sSQL, CNC1_PLAQUETTE_Connexion);
    Console.WriteLine("[existePlaquetteInDB] Avant using()");
     
    using ( OdbcConnection cnx = new OdbcConnection (Scnx ) )
    {
        Console.WriteLine("[existePlaquetteInDB] Avant new OdbcCommand()");
        OdbcCommand cmd = new OdbcCommand(sSQL, cnx);
        Console.WriteLine("[existePlaquetteInDB] Avant open()");
        cnx.Open();
     
        Console.WriteLine("[existePlaquetteInDB] Avant déclaration reader()");
        OdbcDataReader read = cmd.ExecuteReader();
     
          while (read.Read())
          {
           Console.WriteLine("[existePlaquetteInDB] read : " + read[0]);
          }
        Console.WriteLine("[existePlaquetteInDB] Avant fermeture reader()");
        read.Close();
     
    } // fin using
     
    }
    catch (Exception ex)
    {
    Console.WriteLine("[existePlaquetteInDB] Un truc vient de casser. \n " + ex.ToString()); 
    }

    Prenons le coté positif des choses, ça compile.
    Point négatif, j'ai une mignonne exception :

    [existePlaquetteInDB] Avant using()
    [existePlaquetteInDB] Avant new OdbcCommand()
    [existePlaquetteInDB] Avant open()
    [existePlaquetteInDB] Avant déclaration reader()
    [existePlaquetteInDB] Un truc vient de casser.
    System.Data.Odbc.OdbcException: ERROR [08004] [Microsoft][ODBC SQL Server Drive
    r][SQL Server]The server principal "CDM\BONNARJU" is not able to access the data
    base "CNC1_TARIF_NI" under the current security context.
    à System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode re
    tcode)
    à System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior,
    String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMeth
    od)
    à System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior,
    String method, Boolean needReader)
    à System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
    à System.Data.Odbc.OdbcCommand.ExecuteReader()
    à CNC1.Plaquette.existePlaquetteInDB() dans C:\Users\BONNARJU\Documents\Visua
    l Studio 2005\Projects\CNC1\PlaquetteTarifaire\Plaquette.cs:ligne 112

    Mon souci fondamental et joyeusement casse bonbon, réside dans le fait que si j'ouvre la connexion avec la chaine Scnx, j'ai la joie de ne pas avoir de problème de login, car monUIDspecialBDD est accepté par la bdd.
    Alors que dans le using (ou sans parce que j'ai testé les 2), il veut me logguer avec mon identifiant windows (pas glop).


    Des idées, des conseils ?



    Par avance, merci.


    Bisalité

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Bonjour,

    Pour ma part j'ai eu pas mal de problème avec le fameux ODBC, j'ai résolu mes problème en basculant sur OLE DB car d'après ce que j'ai pu lire, ODBC serait en passe de devenir obsolète. (Info ou intox ... je ne sais pas)

    Mais en tout cas avec OLE DB cela marche très bien.
    Sinon vérifie ta connection string :
    http://www.connectionstrings.com/sql-server-2005

    Et pour terminer, je déclare ma string comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Scnx = @"Data Source=SERV\BDD;Initial Catalog=PROD;Integrated Security=True" .... ;
    PS : je ne sais pas si cela va résoudre ton problème mais ça peut être une piste.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pas lu, mais pour sql server, c'est pas une bonne idée de passer par oledb et encore moins par odbc, il y a un provider spécial dans .net pour sql server (dans system.data.sqlclient)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    pas lu, mais pour sql server, c'est pas une bonne idée de passer par oledb et encore moins par odbc, il y a un provider spécial dans .net pour sql server (dans system.data.sqlclient)
    J'ai pas eu l'occasion de choisir odbc, on va dire que c'est imposé, je vais voir si c'est pas plus simple d'utiliser data.sqlclient, après je ferais du lobbying si ça se révèle viable.


    Merci pour l'info !


    Ju

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    y a rien à installer en plus pour utiliser sqlclient ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    y a rien à installer en plus pour utiliser sqlclient ...
    J'ai vu ça, je dois être plus conne que la moyenne mais ça me sort un autre message d'erreurs :

    System.Data.SqlClient.SqlException : Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas acessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes.
    Je suis vernie je crois

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il faut définir la chaine de connexion (faire f1 sur la propriété connectstring pour savoir quoi mettre dedans)
    il faut que sql server accepte les connexions tcp distantes s'il n'est pas installé sur la machine qui execute le client
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il faut définir la chaine de connexion (faire f1 sur la propriété connectstring pour savoir quoi mettre dedans)
    il faut que sql server accepte les connexions tcp distantes s'il n'est pas installé sur la machine qui execute le client

    Théoriquement, je suis sensée avoir une connectString correcte (du moins je l'espère).Je commence à peine à me décourager.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                string cnx;
                cnx = "Server=SERVERSQL.DOMAINE.FR\\INSTANCE3;";
                cnx += "Uid=DOMAINE\\USER;";
                cnx += "password=#####;";
                cnx += "database=CNC1_TARIF_NI;";
                cnx += "Trusted_connection=true;";
                cnx += "Net=dbmssocn;";
                cnx += "Type System Version=SQL Server 2005;";

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cnx += "Net=dbmssocn;";
                cnx += "Type System Version=SQL Server 2005;";
    facultatif à mon avis

    et si tu utilises le trustedconnexion, il ne faut pas mettre le login et le mot de passe dans la chaine de connexion, ca prend l'utilisateur actuel de windows (et il faut qu'il existe dans sql server avec le meme login et le meme mot de passe)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cnx += "Net=dbmssocn;";
                cnx += "Type System Version=SQL Server 2005;";
    facultatif à mon avis

    et si tu utilises le trustedconnexion, il ne faut pas mettre le login et le mot de passe dans la chaine de connexion, ca prend l'utilisateur actuel de windows (et il faut qu'il existe dans sql server avec le meme login et le meme mot de passe)
    J'ai bien noté pour la trusted_connexion, merci.

    Ce que j'ai fait, c'est que j'ai substitué l'identité de mon userSQL et lancé le open().
    Là j'ai une nouvelle cacahuète, celle-là est magique.
    Sérieusement, je craque.

    LogonUser called.
    Did LogonUser Succeed? Yes
    Value of Windows NT token: 896
    Before impersonation: CDM\BONNARJU
    After impersonation: XXXXXXXXXXXXXXXXX
    After Undo: XXXXXXXXXXXXXXXXX
    [CNC1][PlaquetteMain] Valeur de la chaine de connexion :
    Data Source=\\SERVER\INSTANCE3;Initial Catalog=CNC1_TARIF_NI;Us
    er Id =XXXXXXXXXXXXXXXXX;Password =######;Trusted_connection=fal
    se;
    [Plaquette] strBuild.Count() : 5
    [Plaquette] Values : System.Data.Common.ReadOnlyCollection`1[System.Object]
    [Constructeur] Exception :
    System.Data.SqlClient.SqlException: Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: Fournisseur de canaux nommés, error: 5 - Paramètre(s) non valide(s) détecté(s))

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    à la place de Data Source=\\SERVER\INSTANCE3 je tenterais server=ip_du_server\instance3

    Citation Envoyé par Pol63 Voir le message
    il faut que sql server accepte les connexions tcp distantes s'il n'est pas installé sur la machine qui execute le client

    le serveur est il sur le meme poste que celui avec lequel tu essayes de te connecter ?
    tu arrives à te connecter avec studio management avec le login et le pass utilisés dans ta chaine de connexion depuis ce poste ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    à la place de Data Source=\\SERVER\INSTANCE3 je tenterais server=ip_du_server\instance3
    Je vais le tenter


    Citation Envoyé par Pol63 Voir le message
    le serveur est il sur le meme poste que celui avec lequel tu essayes de te connecter ?
    Non mon capitaine

    Citation Envoyé par Pol63 Voir le message
    tu arrives à te connecter avec studio management avec le login et le pass utilisés dans ta chaine de connexion depuis ce poste ?
    Affirmatif mon général

  13. #13
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Je viens de tester avec l'ip, et c'est pas concluant, note que j'ai un nouveau message d'erreur.
    Data Source=10.45.236.71\INSTANCE3;Initial Catalog=CNC1_TARIF_NI;User Id =Cccccccc;Password =cccccccc;Trusted_connection=false;
    [Plaquette] strBuild.Count() : 5
    [Plaquette] Values : System.Data.Common.ReadOnlyCollection`1[System.Object]
    [Constructeur] Exception :
    System.Data.SqlClient.SqlException: Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: Interfaces réseau SQL, error: 26 - Erreur lors de la localisation du serveur/de l'instance spécifiés)
    Merci de l'aide apportée, je crois que je vais arrêter l'informatique et passer le plus clair de mon temps au bahamas à enfiler des perles et à vendre des colliers sur la plage

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    y reste un truc à tester, en plus c'est même pour les nuls

    c'est un générateur de chaine de connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim cb as new System.Data.SqlClient.SqlConnectionStringBuilder 
    cb.DataSource = "nom_du_pc_ou_ip\nom_de_l'instance_SQL"
    cb.UserID =
    cb.Password =
     
    maconnexion.connectstring = cb.ConnectionString
    (c'est du vb.net, je te laisse adapter au c#)
    regarde les autres propriétés y en a surement d'autres à définir et ca génère la chaine de connexion dans la propriété connectionstring


    et malheureusement, je crois que pour aller au bahamas il faut réussir à te connecter, sinon ton patron il va pas te payer le billet d'avion
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    y reste un truc à tester, en plus c'est même pour les nuls

    c'est un générateur de chaine de connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim cb as new System.Data.SqlClient.SqlConnectionStringBuilder 
    cb.DataSource = "nom_du_pc_ou_ip\nom_de_l'instance_SQL"
    cb.UserID =
    cb.Password =
     
    maconnexion.connectstring = cb.ConnectionString
    (c'est du vb.net, je te laisse adapter au c#)
    regarde les autres propriétés y en a surement d'autres à définir et ca génère la chaine de connexion dans la propriété connectionstring


    et malheureusement, je crois que pour aller au bahamas il faut réussir à te connecter, sinon ton patron il va pas te payer le billet d'avion
    Merci pour le générateur, mais j'ai déjà testé hier.
    Quand je te dis que je les cumules les boulettes.

    Bon, j'vais réessayer, j'y crois

  16. #16
    Membre averti
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Bonjour à tous,


    Je tiens à vous remercier de m'avoir apporté des réponses, conseils, ...
    J'ai enfin trouvé d'où vient l'erreur, merci, mesdames et messieurs de ne pas rire, car il s'agit de Windows Vista.

    En effet, si je prends le projet/solution c# et que je le lance à partir d'un Visual Studio 2005 (aussi) mais qui tourne sur un windows XP, je n'ai pas ce message d'erreur, j'ai la requête SQL en folie et tout va pour le mieux.


    Merci encore,



    Résolution : Utiliser Windows XP

  17. #17
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    oui et non !

    vista n'est pas une excuse, on a des applis qui utilisent des bases de donnée sous vista, on pourrait d'ailleurs plus croire qu'xp est une passoire

    de plus pour du .net, vista est beaucoup plus performant qu'xp ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Un FireWall oublié sous Windows Vista qui bloque le port de la DB ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rediriger les erreurs d'authentification avec syslog
    Par ibhow dans le forum Administration système
    Réponses: 1
    Dernier message: 07/08/2008, 20h23
  2. hamster + erreur d'authentification POP3
    Par une_tite_question dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 27/05/2008, 20h48
  3. [OWA 2007] Message d'erreur après authentification
    Par phoenix75 dans le forum Exchange Server
    Réponses: 0
    Dernier message: 29/02/2008, 10h31
  4. [PostgreSQL] [PostgreSQL] erreur d'authentification
    Par snipes dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/05/2007, 01h22
  5. [SQL Server][ODBC - BDE]Erreur hstmt
    Par Zatoobux dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/08/2004, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo