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#] Update d'une base Access


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut [c#] Update d'une base Access
    Bonjour,

    Je développe sous WebMatrix et je cherche à ajouter des tuples dans une table access.
    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
     
                DataSet ObjDataSet = new DataSet("person");
                //déclaration de la chaine de connection
                string strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=D:\DB\droit.mdb";
                //déclaration de l'objet connection
                OleDbConnection ObjConnect = new OleDbConnection(strConnect);
     
                ObjConnect.Open();
                OleDbDataAdapter ObjDataAdapter = new OleDbDataAdapter("SELECT nom, prenom, login, password, groupe FROM person ORDER BY nom", ObjConnect);
                ObjDataAdapter.Fill(ObjDataSet,"person");
     
                DataRow ObjDataRow = ObjDataSet.Tables["person"].NewRow();
                ObjDataRow[0] = tb_nom;
                ObjDataRow[1] = tb_prenom;
                ObjDataRow[2] = tb_login;
                ObjDataRow[3] = tb_pass;
                ObjDataRow[4] = ddl_groupe.SelectedValue;
     
                ObjDataSet.Tables["person"].Rows.Add(ObjDataRow);
     
                //remplissage de la command InsertCommand
                ObjDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO person(nom, prenom, login, password, groupe) Values(@nom, @prenom, @login, @password, @groupe)", ObjConnect);
                ObjDataAdapter.InsertCommand.Parameters.Add("@nom", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@prenom", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@login", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@password", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@groupe", OleDbType.Char,15);
     
                ObjDataAdapter.Update(ObjDataSet,"person");
    Et voilà mon erreur:
    System.Data.OleDb.OleDbException: Erreur de syntaxe dans l'instruction INSERT INTO.
    Si quelqu'un a une idée je suis preneuse...

    J'ai aussi une autre question... a quoi correspondent les paramètres de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjDataAdapter.InsertCommand.Parameters.Add("@groupe", OleDbType.Char,15);

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Par défaut
    Je pense que le problème vient du fait que tu déclares les paramètres APRES la commande INSERT INTO.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //remplissage de la command InsertCommand
                ObjDataAdapter.InsertCommand.Parameters.Add("@nom", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@prenom", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@login", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@password", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand.Parameters.Add("@groupe", OleDbType.Char,15);
                ObjDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO person(nom, prenom, login, password, groupe) Values(@nom, @prenom, @login, @password, @groupe)", ObjConnect);
     
                ObjDataAdapter.Update(ObjDataSet,"person");

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Pourtant sur tous les exemples que j'ai trouvé c'était bien dans cet ordre là...

  4. #4
    Membre éclairé Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Par défaut
    Tu peux bien sur déclarer tes paramètres après la déclaration de la méthode. Il y a visiblement une erreur de syntaxe ds ta requete SQL.

    Vérifie que ta requete fonctionne ds Access (qui à parfois une syntaxe surprenante) et surtout change de base de donnée si tu peux. Access c'est vraiment la merde...

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    je viens de me rendre compte d'un truc. pourquoi tu fais tout ça?
    tu récupéres tes lignes de ta table person ensuite tu ajoutes une ligne supplémentaire dans ta table ensuite tu utilises un dataadpter pour tout mettre à jour? un peu compliquer non?
    il faudrait passer par un objet command ensuite appeler la methode excutenonQuery() de ce même objet.
    en gros ca fait ceci
    OleDbCommand cmd=new OleDbCommand();
    cmd.CommandText=INSERT INTO person(nom, prenom, login, password, groupe) Values(?, ?, ?, ?, ?);
    Cmd.CommandType=CommandType.Text;
    cmd.Parameters.add("nom", OleDbType.Char,tb_nom);
    cmd.Parameters.add("prenom", OleDbType.Char,tb_prenom);
    cmd.Parameters.add("login", OleDbType.Char,tb_login);
    cmd.Parameters.add("password", OleDbType.Char,tb_pass);
    cmd.Parameters.add("groupe", OleDbType.Char,ddl_groupe.SelectedValue);
    cmd.Connection=ObjConnect;
    ObjConnect.open();
    cmd.executeNonQuery();
    ObjConnect.Close();

    Bon il faut que tu vérifies le code. mais ca ressemble à ça je pense.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Merci pour ton code rattlehead mais par contre j'ai une erreur lors de l'ajout d'une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters.Add("nom", OleDbType.Char,tb_nom);
    car le dernier paramètre doit être un int:
    The best overloaded method match for 'System.Data.OleDb.OleDbParameterCollection.Add(string, System.Data.OleDb.OleDbType, int)' has some invalid arguments
    Je trouvais ton code très logique parce que sinon je ne vois pas comment la variable nom prend en paramètre ce qu'il y a dans ma textbox...

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    j'ai tape le code sans VS donc ca n'est peut être pas la bonne surcharge de méthode que j'ai prise. essaye de cmd.Parameters.Add("nom", tb_nom);
    En fait le truc que tu as repris fonctionne pour les procédures stockées

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Bon ben ça ça à l'air de passer mais j'ai une nouvelle erreur sur la ligne:
    qui est du type:
    System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
    Alors que je viens de regarder sur le net et qu'apparement ça a pas l'air faux...

  9. #9
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    apparement il y a une des variables qui est mal formatées. là sur ce coup je ne peux pas t'aider. essaye de voir si ddl_groupe.SelectedValue est du bon format?
    sinon essaye de lancer ta requete à la main dans access.

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Normalement oui, ddl_groupe.SelectedValue est du bon format vu que c'est pas la prenmière fois que je m'en sert...
    Bon ben je vais essayer de trouver en tout cas merci pour ton aide.

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Juste une question: ça viendrait pas du fait que je ne rempli pas tous les champs? Parce qu'en fait il y a en plus de ces champs un champs qui s'incrémente tout seul : :
    Voilà merci

  12. #12
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    pas besoin d'ajouter le champ qui s'incrémente seul. c'est acces qui s'en charge quand tu fais ton insert.
    essaye de vérifier si toutes tes données sont au bon format, comme je te le disais ton erreur provient de là.

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Ca c'est cool si access le fait tout seul!!!
    Ok ben je continu à chercher pour mes formats.
    encore

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 107
    Par défaut
    pense au tag résolu ..

  15. #15
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    oui oui j'y pense mais sur ce coup comme c'est pas résolu...
    d'ailleurs je vous redonne mon code et mon erreur au cas ou quelqu'un d'autre aurais une idée...
    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
     
                        ObjDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO person(nom, prenom, login, password) Values(@nom, @prenom, @login, @password)", ObjConnect);
                        ObjDataAdapter.InsertCommand.Parameters.Add("@nom", "nom");
                        ObjDataAdapter.InsertCommand.Parameters.Add("@prenom", "prenom");
                        ObjDataAdapter.InsertCommand.Parameters.Add("@login", "login");
                        ObjDataAdapter.InsertCommand.Parameters.Add("@password", "password");
                        ObjDataAdapter.InsertCommand.Parameters.Add("@groupe", "groupe");
     
                        DataRow ObjDataRow = ObjDataSet.Tables["person"].NewRow();
     
                        ObjDataRow["nom"] = tb_nom.Text;
                        ObjDataRow["prenom"] = tb_prenom.Text;
                        ObjDataRow["login"] = tb_login.Text;
                        ObjDataRow["password"] = tb_pass.Text;
                        ObjDataRow["groupe"] = ddl_groupe.SelectedValue;
     
                        ObjDataSet.Tables["person"].Rows.Add(ObjDataRow);
     
                        ObjDataAdapter.Update(ObjDataSet,"person");
    voici mon erreur:
    System.Data.OleDb.OleDbException: Erreur de syntaxe dans l'instruction INSERT INTO.
    merci

  16. #16
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    Il me semble que la synaxe @xxx ne convient pas aux paramètres en OleDb. =Utilise des ? à la place.

    Donc
    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
     
    ObjDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO person(nom, prenom, login, password) Values(?, ?, ?, ?)", ObjConnect); 
                        ObjDataAdapter.InsertCommand.Parameters.Add("@nom", "nom"); 
                        ObjDataAdapter.InsertCommand.Parameters.Add("@prenom", "prenom"); 
                        ObjDataAdapter.InsertCommand.Parameters.Add("@login", "login"); 
                        ObjDataAdapter.InsertCommand.Parameters.Add("@password", "password"); 
                        ObjDataAdapter.InsertCommand.Parameters.Add("@groupe", "groupe"); 
     
                        DataRow ObjDataRow = ObjDataSet.Tables["person"].NewRow(); 
     
                        ObjDataRow["nom"] = tb_nom.Text; 
                        ObjDataRow["prenom"] = tb_prenom.Text; 
                        ObjDataRow["login"] = tb_login.Text; 
                        ObjDataRow["password"] = tb_pass.Text; 
                        ObjDataRow["groupe"] = ddl_groupe.SelectedValue; 
     
                        ObjDataSet.Tables["person"].Rows.Add(ObjDataRow); 
     
                        ObjDataAdapter.Update(ObjDataSet,"person");

  17. #17
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    J'avais essayé mais ça ne marche toujours pas....

  18. #18
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    A aucun moment je n'indique lequel de mes champs est la clé primaire, il ne viendrait pas de là mon pb??
    Si oui, comment faire pour le spécifier??

  19. #19
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    je t'avais donné la solution. après comme je te le disais tu as un problème de format. donc il faudrait que tu testes toutes les variables que tu passes en parametre de ton insert. bref fais un console.writeline("INSERT INTO person(nom, prenom, login, password) Values(" + "'" tb_nom + "''+ ",'"+ tb_prenom etc...)
    et recupere cette requete et lance là dans access. tu verras bien ce qu'access te dit.

  20. #20
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    je ne connais pas access, je ne sais pas lancer de requête comme celle ci...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [AC-2007] Probleme update sur une base SQLSERV a partir de formulaires Access
    Par Peper89 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/07/2010, 14h36
  2. Réponses: 2
    Dernier message: 05/05/2007, 10h05
  3. [MFC] Comment créer et utiliser une base Access
    Par maitre hibou dans le forum MFC
    Réponses: 3
    Dernier message: 10/05/2004, 18h11
  4. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41
  5. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46

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