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

ADO.NET Discussion :

[VB.Net] Enregistrement dans dataset mais pas dans Table sqlserver


Sujet :

ADO.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut [VB.Net] Enregistrement dans dataset mais pas dans Table sqlserver
    Bonjour,
    j'essaie d'insérer des données en utilisant le code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim tblAddCritere As DataTable
    tblAddCritere = dsCPP.Tables("LienCritereControle")
    Dim drCurrent As DataRow
    drCurrent = tblAddCritere.NewRow()
     
            drCurrent("C1") = Var1
            drCurrent("C2") = Var2
            drCurrent("C3") = Var3
     
    tblAddCritere.Rows.Add(drCurrent)
    Les données sont inséres dans le dataset (lues dans datagrid : DataGridView1.DataSource = dsCPP.Tables("LienCritereControle")
    Je n'ai pas de message d'erreur et les données ne sont
    pas enregistrées dans sqlserver

    Mais je ne vois quand même un problème : la table serveur a une clé primaire auto incrément (première valeur = 1). Quand la table est vide, et que j'insère une valeur avec tblAddCritere.Rows.Add(drCurrent), la lecture du dataset affiche une clé primaire dont la valeur est 0

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Bah la mise à jour de la DB n'est pas "automagique"... il faut mettre à jour explicitement en utilisant un DataAdapter, comme expliqué ici :
    http://dotnet.developpez.com/articles/ado2/vbnet/

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Merci, pour l'info.J'ai modifié le code après lecture de la doc,
    mais toujours pas d'insertion dans la base : visiblement, je n'ai pas tout compris !

    J'ai créé le dataset : dsCPP
    j'ai créé l'adapter : da

    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
     Dim da As New SqlDataAdapter("SELECT *  FROM [TEST].[dbo].[CPP_LienCritereControle]", objConn)
     
     da.FillSchema(dsCPP, SchemaType.Source, "LienCritereControle")
     da.MissingSchemaAction = MissingSchemaAction.AddWithKey
     da.Fill(dsCPP, "LienCritereControle")
     
     
     
    Dim tblAddCritere As DataTable
    tblAddCritere = dsCPP.Tables("LienCritereControle")
    Dim drCurrent As DataRow
    drCurrent = tblAddCritere.NewRow()
     
            drCurrent("C1") = Var1
            drCurrent("C2") = Var2
            drCurrent("C3") = Var3
    	drCurrent("C4") = Var4
     
    tblAddCritere.Rows.Add(drCurrent)
     
    da.InsertCommand = New SqlCommand("INSERT INTO [TEST].[dbo].[CPP_LienCritereControle] (C1, C2,C3,C4) Values(Var1,Var2,Var3,Var4)", objConn)
     
    da.Update(dsCPP, "LienCritereControle")

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Essaie pas de définir manuellement les commandes d'insertion et de mise à jour, c'est galère... Utilise plutôt un CommandBuilder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim builder As New SqlCommandBuilder(da)
    da.Update(dsCPP, "LienCritereControle")
    Il se débrouillera pour créer automatiquement les commandes Insert/Update/Delete en fonction du Select

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Merci, ça y est j'ai pu résoudre mon problème.
    Par contre je voudrai accéder au dataapter depuis un bouton. Mais si je déclare le da au niveau de la classe, j'ai l'erreur "declaration expected" dans les 3 lignes qui suivent la déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Form1
            -----
         Dim da As New SqlDataAdapter(myCommand)
             "declaration expected"    da.FillSchema(ds, SchemaType.Source, "LienCritereControle")
         "declaration expected"       da.MissingSchemaAction = MissingSchemaAction.AddWithKey
        "declaration expected"        da.Fill(ds, "LienCritereControle")

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est normal vu que cette zone (au niveau de la classe) attend de recevoir des déclarations (définition de champs, propriétés, méthodes etc) et pas des appels à des méthodes comme tu le fais avec tes 3 lignes.
    Ce que tu peux faire c'est de mettre ces 3 lignes dans le constructeur de ta classe Form ou t'abonner à l'évènement Load et les mettre dans le gestionnaire.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Merci, pour la réponse !
    C'est noté pour la classe qui ne doit contenir que des déclarations.
    Par contre, je ne comprends pas toujours pas une chose basique :
    comment accéder à l'instance du da depuis une autre sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class Form1
    Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          Dim da As New SqlDataAdapter(myCommand)
    End Sub
    
    Private Sub btnAddNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddNew.Click
         Dim builder As New SqlCommandBuilder(da)
         da.Update(ds, "LienCritereControle")
        La référence d'objet n'est pas définie à une instance d'un objet 
    End Sub
    end class

  8. #8
    Invité
    Invité(e)
    Par défaut
    Laisse la déclaration de ton Adaptateur au niveau de la classe. Déclare le en tant que membre de la classe et non dans le gestionnaire de l'event Load parce que la portée est limitée au niveau de ce bloc uniquement. Fais comme t'avais fait dans ton avant dernier post mais uniquement pour la déclaration.

    Sinon il va falloir regarder des tutos au sujet de la POO (Programmation Orientée Objet) .

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Merci, pour les conseils !

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

Discussions similaires

  1. Reception de mails dans OWA mais pas dans outlook
    Par spynux dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 12/05/2008, 00h25
  2. Réponses: 2
    Dernier message: 23/04/2008, 13h17
  3. Doublons affichage dans DBGrid mais pas dans ma BDD
    Par socooooool dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/07/2006, 18h16
  4. [Cookies] Problème dans IE mais pas dans FF
    Par Manio 54 dans le forum Langage
    Réponses: 19
    Dernier message: 15/12/2005, 18h30
  5. CROSSTAB ::marche dans access mais pas dans MS SQL 2000
    Par anselmeJ dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 07h56

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