1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut Mise à jour d'une base de données SQL à partir d'une DATASET

    Bonjour,
    Débutant j'utilise VB.NET 2010 express et SQL server 2008 R2
    J'ai créé une base de données SQL et j'arrive bien à récupérer les données dans une DATASET.
    Par contre après modification des données dans la DATASET j'essaie de mettre à jour la base de données SQL et là j'ai un plantage. J'ai consulté un tas de tutos mais rien n'y fait ...

    Merci d'avance pour votre aide ...

    Voilà mon code :

    Code VB.NET : 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
    Imports System.Data.SqlClient
     
    Public Class Accueil
     
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
     
        Dim Connexion As New SqlConnection("Data Source=localhost;Initial Catalog=BDDSQL;User Id=sa;Password=XXXXX;")
        Dim MonDataSet As New DataSet
        Dim Adaptateur As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Propriétaire", Connexion)
        Dim CommandeBuilder As SqlCommandBuilder = New SqlCommandBuilder(Adaptateur)
     
        Connexion.Open()
        Adaptateur.Fill(MonDataSet, "Propriétaire")
     
        'Modification des données dans le DATASET, jusque-là ça fonctionne correctement
        'C'est là que le plantage arrive au niveau de l'instruction suivante
     
        Adaptateur.Update(MonDataSet, "Propriétaire")
     
        Connexion.Close()
    End Sub
    End Class

  2. #2
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 835
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 835
    Points : 3 116
    Points
    3 116

    Par défaut

    BONJOUR

    Avec CommandBuilder et la syntaxe utilisée pour ton Adapter(il a plusieurs ctor parametrés) ,ta connection est ouverte une seule fois ,car c'est une connection optimisée...(pas de souci pour le Connection.Close)

    Ton code est à revoir comme suit avec des variables en portée globale:

    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
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    Imports System.Data.SqlClient
    Public Class Form3
        Private connexionString = "Data Source=localhost;Initial Catalog=BDDSQL;User Id=sa;Password=XXXXX;"
        Private Connexion As SqlConnection = Nothing
        Private Adaptateur As SqlDataAdapter = Nothing
        Private MonDataSet As DataSet = Nothing
        Private Sub btnFill_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFill.Click
     
            Connexion = New SqlConnection(connexionString)
            Adaptateur = New SqlDataAdapter("SELECT * FROM Propriétaire", Connexion)
            Dim CommandeBuilder As SqlCommandBuilder = New SqlCommandBuilder(Adaptateur)
            MonDataSet = New DataSet
            Connexion.Open()
            Adaptateur.Fill(MonDataSet, "Propriétaire")
            DataGridView1.DataSource = MonDataSet
            DataGridView1.DataMember = "Propriétaire"
     
     
     
     
     
     
     
        End Sub
     
        Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
     
            'Modification des données dans le DATASET, jusque-là ça fonctionne correctement
            'C'est là que le plantage arrive au niveau de l'instruction suivante
            If Adaptateur IsNot Nothing Then
                Adaptateur.Update(MonDataSet, "Propriétaire")
            End If
     
        End Sub
    End Class
    bon code....

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut

    Bonjour MABROUKI et merci pour ton aide,

    J'ai respecté, je pense à la lettre, tes conseils mais j'ai un autre problème.
    J'essaie d'affecter les données récupérées dans le DATASET à des TextBox pour pouvoir ensuite les modifier avant de mettre à jour la BDSQL.
    J'obtiens le message d'erreur suivant au moment où je clique sur le bouton (Button7) d'enregistrement dans la BDDSQL: La génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.
    J'ai certainement commis une erreur mais je ne la vois pas ...

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Imports System.Data.SqlClient
     
    Public Class Accueil
        Private connexionString = "Data Source=localhost;Initial Catalog=BDDSQL;User Id=sa;Password=XXXXX;"
        Private Connexion As SqlConnection = Nothing
        Private Adaptateur As SqlDataAdapter = Nothing
        Private MonDataSet As DataSet = Nothing
     
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
     
            Try
                Connexion = New SqlConnection(connexionString)
                Adaptateur = New SqlDataAdapter("SELECT * FROM Propriétaire", Connexion)
                Dim CommandeBuilder As SqlCommandBuilder = New SqlCommandBuilder(Adaptateur)
                MonDataSet = New DataSet
                Connexion.Open()
                Adaptateur.Fill(MonDataSet, "Propriétaire")
     
                Me.TextBox1.Text = MonDataSet.Tables("Propriétaire")(0)("Identité").ToString
                Me.TextBox2.Text = MonDataSet.Tables("Propriétaire")(0)("Adresse1").ToString
                Me.TextBox3.Text = MonDataSet.Tables("Propriétaire")(0)("Adresse2").ToString
                Me.TextBox4.Text = MonDataSet.Tables("Propriétaire")(0)("Adresse3").ToString
                Me.TextBox5.Text = MonDataSet.Tables("Propriétaire")(0)("CodePostal").ToString
                Me.TextBox6.Text = MonDataSet.Tables("Propriétaire")(0)("Commune").ToString
                Me.TextBox7.Text = MonDataSet.Tables("Propriétaire")(0)("TélFixe").ToString
                Me.TextBox8.Text = MonDataSet.Tables("Propriétaire")(0)("TélPortable").ToString
                Me.TextBox9.Text = MonDataSet.Tables("Propriétaire")(0)("Fax").ToString
                Me.TextBox10.Text = MonDataSet.Tables("Propriétaire")(0)("Email").ToString
                Me.TextBox11.Text = MonDataSet.Tables("Propriétaire")(0)("Fonction").ToString 
     
            Catch ex As Exception
                Stop
            End Try
    End Sub
     
    Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
     
            Try
                MonDataSet.Tables("Proprietaire")(0)("Identite") = Me.TextBox1.Text
                MonDataSet.Tables("Proprietaire")(0)("Adresse1") = Me.TextBox2.Text
                MonDataSet.Tables("Proprietaire")(0)("Adresse2") = Me.TextBox3.Text
                MonDataSet.Tables("Proprietaire")(0)("Adresse3") = Me.TextBox4.Text
                MonDataSet.Tables("Proprietaire")(0)("CodePostal") = Me.TextBox5.Text
                MonDataSet.Tables("Proprietaire")(0)("Commune") = Me.TextBox6.Text
                MonDataSet.Tables("Proprietaire")(0)("TelFixe") = Me.TextBox7.Text
                MonDataSet.Tables("Proprietaire")(0)("TelPortable") = Me.TextBox8.Text
                MonDataSet.Tables("Proprietaire")(0)("Fax") = Me.TextBox9.Text
                MonDataSet.Tables("Proprietaire")(0)("Email") = Me.TextBox10.Text
                MonDataSet.Tables("Proprietaire")(0)("Fonction") = Me.TextBox11.Text
     
    'Le plantage a lieu à l'instruction suivante avec le message : La génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.
     
                If Adaptateur IsNot Nothing Then
                    Adaptateur.Update(MonDataSet, "Propriétaire")
                End If
     
            Catch ex As Exception
                Stop
            End Try
     
        End Sub
    End Class

  4. #4
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 835
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 835
    Points : 3 116
    Points
    3 116

    Par défaut

    Bonjour

    Ta table en BD doit avoir au moins une colonne clé !!!

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut

    Tout fonctionne !

    Un GRAND merci MABROUKI

    Bonne soirée

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

Discussions similaires

  1. [Débutant] Mise à jour entre 2 Bases de données Sql Server express
    Par hi-wave dans le forum ASP.NET MVC
    Réponses: 5
    Dernier message: 11/11/2016, 11h34
  2. Réponses: 10
    Dernier message: 28/10/2011, 13h39
  3. Réponses: 4
    Dernier message: 21/01/2011, 10h05
  4. Connecté une base de donnée sql server v7 à une application Jbuilder9
    Par souheilzouabizouabi dans le forum MS SQL-Server
    Réponses: 0
    Dernier message: 15/04/2008, 13h31
  5. fichier XML à partir d'une base de données SQL
    Par MuldyMath dans le forum XQUERY/SGBD
    Réponses: 6
    Dernier message: 24/05/2006, 14h57

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