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

ASP.NET Discussion :

[C#] Problème requête update via OdbcDataAdpter


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [C#] Problème requête update via OdbcDataAdpter
    Bonjour !

    J'ai une erreur lorsque j'essaie de faire un update sur une table via OdbcDataAdapter.

    Voilà 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 IAmConnected()
        {
            DataSet oDataSet;
            OdbcDataAdapter oDataAdapter;
     
            BD bd = new BD();
            OdbcConnection con = bd.Connect();
            oDataAdapter = new OdbcDataAdapter("select * from connected", con);
            oDataSet = new DataSet("Connected");
            oDataAdapter.Fill(oDataSet, "Connected");
     
     
            oDataAdapter.InsertCommand = new OdbcCommand("INSERT INTO connected(LOGIN) Values(@LOGIN)", con);
            oDataAdapter.InsertCommand.Parameters.Add("@LOGIN", OdbcType.NVarChar,15, "LOGIN");
     
            DataRow oDataRow;
            oDataRow = oDataSet.Tables["Connected"].NewRow();
            oDataRow["LOGIN"] = HttpContext.Current.Session["ID"];
            oDataSet.Tables["Connected"].Rows.Add(oDataRow);
            try
            {
                oDataAdapter.Update(oDataSet, "Connected");
            }
            catch (Exception e)
            {
                Response.Write(e.Message.ToString());
            }
        }
    Dans un premier temps, je récupère le contenu de ma table dans un dataset.
    Puis j'ajoute une ligne à mon dataset
    Puis j'insère une commande à odbcdataadapter (ça je n'ai pas compris)
    Puis update.

    J'ai l'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERROR [HYT00] Le champ 'LOGIN' ne peut être vide (null)
    J'ai vérifier et
    HttpContext.Current.Session["ID"]
    n'est pas vide...
    Qu'est ce qui ne va pas dans ce code ??
    Merci pour vos réponses !!
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Puis j'insère une commande à odbcdataadapter (ça je n'ai pas compris)
    En fait ton dataadapter peut exécuter toutes les requêtes CRUD sur ta table, à condition de lui fournir les commandes SQL à utiliser.
    En faisant ça, tu lui indique la commande Insert à utiliser.

    Sinon pour ton PB, je voit pas. J'ai essayer (mais avec SQL et pas ODBC) et ça fonctionne très bien.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Merci pour les explications.
    Peux tu me dire ce que le réprésente le symbole @ dans:
    oDataAdapter.InsertCommand = new OdbcCommand("INSERT INTO connected(LOGIN) Values(@LOGIN)",
    tout le monde est d'accord pour critiquer la pensée unique

  4. #4
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    le "@" siginifie qu'il s'agit d'un paramètre dans ta requête SQL

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Donc @LOGIN correspond à oDataRow["LOGIN"] ??
    tout le monde est d'accord pour critiquer la pensée unique

  6. #6
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    non en fait quand tu fait INSERT INTO connected(LOGIN) Values(@LOGIN), tu déclare la valeur de la colonne LOGIN comme étant une variable, nommée @LOGIN.

    Ensuite, quand tu fait oDataAdapter.InsertCommand.Parameters.Add("@LOGIN", OdbcType.NVarChar,15, "LOGIN"); tu déclare un paramètre associé à la varibale @LOGIN correspondant à la colonne LOGIN

    Enfin, quand tu fait oDataRow["LOGIN"] = "tada"; tu associe la valeur "tada" à la colonne LOGIN, or ton Parameter sait qu'à la colonne LOGIN est associée la variable @LOGIN

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ok, j'ai compris, merci.

    Ma table connected est constituée d'un seul champs LOGIN qui est un varchar de longueur 15 et qui ne peut être null. le champs LOGIN est une clé primaire.
    Pour toi, la code que j'ai écrit correspond bien ?
    tout le monde est d'accord pour critiquer la pensée unique

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    En tout cas, quand je fais:
    oDataAdapter.InsertCommand = new OdbcCommand("INSERT INTO connected(LOGIN) Values('test')", con);
    ça marche ..., je retrouve bien test dans ma table ...
    tout le monde est d'accord pour critiquer la pensée unique

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    J'ai trouvé

    En regardant sur la msdn ...

    En fait, la syntaxe pour la déclaration de odbccommand se fait comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oDataAdapter.InsertCommand = new OdbcCommand("INSERT INTO connected(LOGIN) Values(?)", con);
    Et ensuite le slignes restent identiques
    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
     
            oDataAdapter.InsertCommand.Parameters.Add("@LOGIN", OdbcType.VarChar, 10, "LOGIN");
     
            DataRow oDataRow;
            oDataRow = oDataSet.Tables["Connected"].NewRow();
            oDataRow["LOGIN"] = HttpContext.Current.Session["ID"].ToString();
            oDataSet.Tables["Connected"].Rows.Add(oDataRow);
     
            try
            {
                oDataAdapter.Update(oDataSet, "Connected");
            }
            catch (Exception e)
            {
                Response.Write(e.Message.ToString());
            }
    Merci pour ton aide et pour les explications Guitoux
    tout le monde est d'accord pour critiquer la pensée unique

  10. #10
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Ah oui effectivement je me rappel. ODBC n'utilise pas la même syntaxe que SQlServer. C'est d'ailleur pas pratique les ? car si t'as plusieurs paramètre, c'est leur ordre qui compte, donc faut pas se gourer.
    Question : C'est une BDD Access que tu attaque ??

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Question : C'est une BDD Access que tu attaque ??
    Non c'est une BD MySQL ...
    tout le monde est d'accord pour critiquer la pensée unique

  12. #12
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    ok.
    Tu sais qu'il existe une interface spécifique pour attaquer MySQL ? Elle est pas developpée par Microsoft (comme par hasard) mais elle existe (je sais plus son nom, faut rechercher) et elle attaque MySQL en direct avec ses propres commandes. C'est plus performant.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Je sais qu'il existe quelque chose mais il me paraissait plus simple, dans un premier temps, de commencer avec ODBC.

    Quand je serai familiarisé, je regarderai. C'est vrai, on m'a déjà dit qu'attaquer par ODBC c'était plus long ...
    tout le monde est d'accord pour critiquer la pensée unique

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

Discussions similaires

  1. Problème requète update, sql server 2000
    Par Guena5635 dans le forum Développement
    Réponses: 3
    Dernier message: 28/04/2008, 10h32
  2. Problème requète UPDATE + date
    Par gluc86 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2008, 09h20
  3. [Débutant] Problème requête Update
    Par aure298 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/01/2008, 16h54
  4. Problème Requête UPDATE (ou pas)
    Par mastasushi dans le forum Access
    Réponses: 7
    Dernier message: 03/05/2006, 08h42
  5. [MySQL] problème requête UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/10/2005, 18h28

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