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

Accès aux données Discussion :

[VB.NET] Insert avec CommandBuilder + Databinding


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [VB.NET] Insert avec CommandBuilder + Databinding
    Bonjour
    J'utilise Visual Studio 2003 et SQL server 2000

    J'ai une Windows.Form avec des Textbox qui utilise le databinding pour se déplacer dans les enregistrements.

    A l'ouverture du formulaire, j'ai cette Sub qui se lance:

    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
     
    Dim SqlConnNew As New SqlConnection(StrConn)
                SqlConnNew.Open()
     
                Dim SqlCmdSelect As New SqlCommand("SELECT * FROM Produit", SqlConnNew)
     
                Dim SqlCmdInsert As New SqlCommand("INSERT INTO Produit VALUES(@ProIDProduit,@ProRefProduitProduit,@ProRefFournisseurProduit,@ProTypeProduit,@ProFabricantProduit,@ProNomProduit,@ProPAHTVAProduit,@ProPVHTVAProduit,@ProQuantiteProduit)", SqlConnNew)
                SqlCmdInsert.Parameters.Add("@ProIDProduit", SqlDbType.Int, 10, "RefProduit")
                SqlCmdInsert.Parameters.Add("@ProRefFournisseurProduit", SqlDbType.Int, 10, "RefFournisseur")
                SqlCmdInsert.Parameters.Add("@ProTypeProduit", SqlDbType.Char, 30, "ProType")
                SqlCmdInsert.Parameters.Add("@ProFabricantProduit", SqlDbType.Char, 30, "ProFabricant")
                SqlCmdInsert.Parameters.Add("@ProNomProduit", SqlDbType.Char, 30, "ProNom")
                SqlCmdInsert.Parameters.Add("@ProPAHTVAProduit", SqlDbType.Int, 6, "ProPAHTVA")
                SqlCmdInsert.Parameters.Add("@ProPVHTVAProduit", SqlDbType.Int, 6, "ProPVHTVA")
                SqlCmdInsert.Parameters.Add("@ProQuantiteProduit", SqlDbType.Int, 5, "ProQuantite")
     
                Dim ProduitCommandBuilder As New SqlCommandBuilder(SqlDA)
                SqlDA.SelectCommand = SqlCmdSelect
                SqlDA.InsertCommand = SqlCmdInsert
     
                SqlDA.Fill(DSProduit, "Produit")
                DTProduit = DSProduit.Tables("Produit")
    Mes enregistrements s'affichent et je sais me deplacer.

    J'ai un bouton UPDATE pour les mises a jour qui fonctionne bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BindingContext(DTProduit).EndCurrentEdit()
    SqlDA.Update(DTProduit)

    ---
    La partie concernant l'insertion semble correcte ?
    Comment puis je apeller l'insertion en utilisant un bouton ?
    J'ai essayé avec BindingContext(DTProduit).AddNew() mais sans succes

    Merci d'avance a ceux qui sauront me repondre.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Il manque des informations sur la façon dont les éléments du formulaire sont liés aux données, la structure du DataAdapter SqlDA ou de la DataTable DTProduits... A vue de nez, la commande d'insertion n'est pas choquante, mais elle peut très bien contenir des erreurs sur le nom des colonnes par exemple.
    Il manque également des informations sur ce qui ne marche pas. "J'ai essayé avec BindingContext(DTProduit).AddNew() mais sans succes" : quel est le code ? qu'est-ce qui se passe ?

    Visiblement SqlDA est un DataAdapter, SqlDS est un DataSet, et les modifications de la base se font par l'intermédiaire de ces objets.
    Dans ce cas, il faut insérer les nouvelles lignes dans la DataTable DTProduit, puis envoyer les modifications à la base de données avec la méthode Update du DataAdapter.

    Insertion d'un nouvel enregistrement dans une DataTable en C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataRow row = DTProduits.NewRow();
    // affectation des valeurs des champs de row selon les valeurs entrées dans le formulaire
    DTProduits.Rows.Add(row);
    Ou alors, en utilisant la propriété BindingContext (à mon avis inutilement plus lourd que la méthode précédente, il est plus simple de modifier directement la DataTable) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BindingContext[DTProduit].AddNew();
    DataRow row = ((DataRowView)BindingContext[DTProduit].Current).Row;
    // affectation des valeurs des champs de row selon les valeurs entrées dans le formulaire
    BindingContext[DTProduit].EndCurrentEdit();
    Ou alors, en utilisant dans le formulaire un DataGridView lié à la DataTable, les modifications effectuées dans le DataGridView sont automatiquement répercutées dans la DataTable.


    Autres remarques :
    - il me semble plus logique d'utiliser la méthode EndCurrentEdit lors de la modification de la DataTable que lors de la mise à jour de la base...
    - pourquoi introduire un CommandBuilder sans l'utiliser? (mais peut-être est-il en fait utilisé dans une partie du code non copiée ici)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord, un grand merci pour ton aide.
    Je me suis creusé les méninges pour finir avec un message d'erreur comme quoi le CommandBuilder ne sait pas gerer plus d'une table (Pas de chance, yen a 2 qui sont liées :'( pour la partie des produits )

    Par contre ca a ete utile pour d'autres formulaires

    Je n'ai pas encore ajouté des lignes de code pour verifier que les donnees etaient valide mais l'important, c'est deja que ca marche

    Au chargement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim SqlConnNew As New SqlConnection(StrConn)
    SqlConnNew.Open()
     
    Dim SqlCmdSelect As New SqlCommand("SELECT * FROM Employe", SqlConnNew)
     
    Dim EmployeCommandBuilder As New SqlCommandBuilder(SqlDA)
    SqlDA.SelectCommand = SqlCmdSelect
     
    SqlDA.Fill(DSEmploye, "Employe")
    DTEmploye = DSEmploye.Tables("Employe")
    -> Pour le CommandBuilder, il me faut un SELECT. Il ne rale pas si je ne lui donne pas l'insert/update/delete.

    Mon Bouton d'update:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BindingContext(DTEmploye).EndCurrentEdit()
    SqlDA.Update(DTEmploye)
    -> Sans la ligne avec EndCurrentEdit, il ne garde pas la modifification.
    -> Le .Update semble etre suffisant pour le CommandBuilder gere l'update

    Mon Bouton d'ajout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BindingContext(DTEmploye).EndCurrentEdit()
    BindingContext(DTEmploye).AddNew()
    -> le AddNew me met en position pour un nouvelle enregistrement et vide les Textbox. Je devais m'y prendre comme un pied avant

    Pour l'ajout d'un enregistrement, je dois cliquer sur AJOUT puis après avoir rempli les champs, le bouton UPDATE enregistre le tout

    C'est la méthode la plus simple que j'ai reussi a trouver.

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

Discussions similaires

  1. [.net 2.0] Erreur aléatoire avec le databinding
    Par bossun dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/05/2011, 10h01
  2. [ADO.Net][C#/SQL 2005] Comment faire INSERT avec variable ?
    Par hduchemin dans le forum Accès aux données
    Réponses: 1
    Dernier message: 25/01/2006, 17h34
  3. [ADO.NET] Problème avec Insert dans base de données
    Par mpascolo dans le forum Accès aux données
    Réponses: 9
    Dernier message: 24/01/2005, 09h36
  4. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52
  5. [IB v7.1][C#][ADO.NET] Démarrer avec IB 71
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 14
    Dernier message: 05/08/2003, 12h25

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