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 :

requete sql via odbc "la propriété connection n'a pas été initialisée ."


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut requete sql via odbc "la propriété connection n'a pas été initialisée ."
    Salut !

    J'ai un soucis pour faire un insert sur une bdd mssql 2005 via odbc

    Voici mon code :

    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
     public void button3_Click(object sender, EventArgs e)
            {
     
     
     
                OdbcConnection connection = new System.Data.Odbc.OdbcConnection("DSN=" + textBox2.Text + ";UID="+textBox3.Text+";PWD="+textBox4.Text+";");
     
     
     
     
     
                    connection.CreateCommand();
                  OdbcCommand myCommand = new OdbcCommand("INSERT INTO [table] VALUES " + textBox7.Text + " , connection");
     
                  try
                  {
                      connection.Open();
                      myCommand.ExecuteNonQuery();
                  }
                  catch (Exception ex)
                  {
                      MessageBox.Show(ex.Message);
                  }
     
     
     
     
     
            }

    Voici l'erreur :
    ExecuteNonQuery : la propriété connection n'a pas été initialisée .

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Citation Envoyé par kelvir Voir le message

    connection.CreateCommand();
    OdbcCommand myCommand = new OdbcCommand("INSERT INTO [table] VALUES " + textBox7.Text + " , connection");

    D'apres moi tu n'associe pas bien ta connection et ta commande !!

    Mais (meme si ca ne change rien a ton problème de syntaxe) pourquoi utilise tu odbc alors que VS propose le connecteur ADO pour SQL Server

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    L'habitude de bosser avec odbc !

    Personne n'a d"idées ???

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Citation Envoyé par kelvir Voir le message
    L'habitude de bosser avec odbc !
    Personne n'a d"idées ???
    A mon avis c'est le moment de changer d'habitude puisque ca ne marche pas
    Personellement je n'ai pas l'habitude d'ODBC mais mon expérience de ADO me permet de supputer une erreur dans ton code que je j'avais montré dans le précédant message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new OdbcCommand("INSERT INTO [table] VALUES " + textBox7.Text + " , connection");
    moi je ferais plutot (en priant tres fort pour que textBox7.Text contienne une syntaxe correcte pour l'insert)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string CommandText=string.Format("INSERT INTO [table] VALUES {0}",textBox7.Text);
    new OdbcCommand(CommandText , connection);
    Mais je trouve que cette maniere de faire est plus que pas propre.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Je vais essayer ta méthode ! (un peu de bricolage peut pas faire de mal )

    PS : Que reproche tu a odbc ??? Je m'en sert sur plusieurs autres support et je n'ai jamais rencontré de problème ! L'avantage est que s'est plus "adaptatif" , on peut changer le sgbd sans changer la source

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Arf!!!! Nouveau problème


    Syntaxe incorrecte vers AIP
    La textbox 7 contient : AIP Robots

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    La syntaxe du INSERT n'est pas bonne. Les valeurs sont obligatoirement entre () il me semble..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE VALUES(AIP Robots);

    et non pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE VALUES AIP Robots;

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Bah non c'est une variable !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string CommandText = string.Format("INSERT INTO [table] VALUES "+textBox7.Text+" ");

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Je voulais dire comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string CommandText = string.Format("INSERT INTO [table] VALUES ("+textBox7.Text+")");


    A moins que textBox7.Text contient la string "(AIP Robots)"

    Ps : voir les requêtes paramétrées ou procédure stockée parce que là ca craint un peu...

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Bah justement , textbox7.text contient AIP robot

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par kelvir Voir le message
    Bah justement , textbox7.text contient AIP robot
    Donc c'est faux Elles sont où les parenthèses pour VALUES ???

    La requête finale devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE VALUES(AIP Robots);
    et pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE VALUES AIP Robots;
    Tu vois la différence ?

  13. #13
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Ca marche ca une chaine à l'arrache et sans quotes?

  14. #14
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Ca marche ca une chaine à l'arrache et sans quotes?
    J'en doute, une raison de plus pour passer par des requêtes paramétrées. On s'évite pas mal de galères avec ^^

    Et sinon, un INSERT d'une seule valeur sans préciser le champ me semble étrange. Parce qu'il y a au moins un champ de clé primaire en plus du champ texte que tu veux remplir. Il faut indiquer explicitement les champs en général.

  15. #15
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Ca marche ca une chaine à l'arrache et sans quotes?
    C'est approximatif à l'arrache, de toute façon VALUES doit être suivi par ( et se terminer par ) ce qui n'est pas le cas dans son exemple.

  16. #16
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Effectivement , c'est juste un exemple Test pour vérifier le modèle .


    Voici le code qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string CommandText = string.Format("INSERT INTO [table] VALUES ('"+textBox7.Text+"') ");

  17. #17
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par hegros
    C'est approximatif à l'arrache, de toute façon VALUES doit être suivi par ( et se terminer par ) ce qui n'est pas le cas dans son exemple.
    Le problème ce ne sont pas les parenthèses, qui doivent être effectivement présentent, mais le fait qu'une chaîne doit être entre quote (i.e. 'ma chaine').

    Encore une fois, le meilleur moyen d'éviter ce genre de désagréments ce sont les requêtes paramétrées. C'est simple à mettre en place, ça évite les problèmes d'injection, ça gère les quotes à l'intérieur d'une chaîne et j'en passe. Il y a un article à ce sujet dans la section .Net

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Le problème ce ne sont pas les parenthèses, qui doivent être effectivement présentent, mais le fait qu'une chaîne doit être entre quote (i.e. 'ma chaine').

    Encore une fois, le meilleur moyen d'éviter ce genre de désagréments ce sont les requêtes paramétrées. C'est simple à mettre en place, ça évite les problèmes d'injection, ça gère les quotes à l'intérieur d'une chaîne et j'en passe. Il y a un article à ce sujet dans la section .Net
    Je vais y jeter un coup d'oeuil

    Merci

  19. #19
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Le problème ce ne sont pas les parenthèses, qui doivent être effectivement présentent, mais le fait qu'une chaîne doit être entre quote (i.e. 'ma chaine').
    Il y avait 2 problèmes les parenthèses et les quotes. L'un ou l'autre seul cela m'étonnerait que ca marche, il faut les 2.

    Et je suis complètement d'accord avec toi sur l'utilisation des requêtes paramétrées pour éviter les problématiques que tu cites

  20. #20
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Oups !

    J'ai loupé plusieurs etapes de ce thead !
    En gros ce qui a été di je l'avais dis hier

    moi je ferais plutot (en priant tres fort pour que textBox7.Text contienne une syntaxe correcte pour l'insert)
    Mais comme la souligné Stormimon je nécessaire d'utiliser une vraie requete parametrées plutot que prier pour ne pas faire d'erreur de syntaxe SQL a la saisie de Textbox7 (joli nom explicite par ailleurs )

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/04/2012, 19h02
  2. Réponses: 3
    Dernier message: 14/04/2012, 12h06
  3. Réponses: 2
    Dernier message: 25/05/2010, 20h27
  4. Requete sql via vba
    Par Echizen1 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/12/2006, 16h13
  5. Doc pour créer requetes SQL via ODBC sous EXCEL
    Par satanas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/01/2005, 08h33

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