Mise a jour d'un dataset entier dans une base SQLite [Résolu]

Messages postés
417
Date d'inscription
vendredi 22 février 2008
Dernière intervention
7 janvier 2018
- - Dernière réponse : CGSI3
Messages postés
417
Date d'inscription
vendredi 22 février 2008
Dernière intervention
7 janvier 2018
- 27 nov. 2011 à 19:07
Bonsoir a tous,
Je travaille actuellement sur une base Sqlite tres simple avec un utilisateur unique.
Mon appli n'utilise que la représentation de cette base en DataSet.
J'arrive a extraire correctement les données de cette base, par contre je ne trouve aucun exemple valable me permetant a l'inverse de mettre a jour cette Base avec le Dataset modifié.

Voici un exemple de ce cela pourrais donné ... mais qui bien sur ne fonctionne pas.

        ...
       'Connection a la Base
       Private Connex As SQLiteConnection
       'Liste des noms des tables de la base
        Dim ListeTable as List(of String)
        ....
        Try
            For Each NOM In ListeTable
                Dim Txte As String = "UPDATE " & NOM & " SET *"
                Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(Txte, Connex)                 adapter.Update(_MyDataset, NOM)
            Next
            MsgBox("La Sauvegarde du DataSet est effectuée ", MsgBoxStyle.Information)
        Catch
            MsgBox("La Sauvegarde du DataSet a Echouée ", MsgBoxStyle.Critical)
        End Try
        ...
   

Pourriez vous m'aider a effectuer cette opération.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
3
Merci
Bonjour,

En fait je ne travail pas avec SQLite mais SQLServer, mais c'est du SQL. Les dataadapter and Co doivent être équivalent vis à vis du .Net donc :

[1] Ta commande :

"UPDATE " & NOM & " SET *"


ne veut rien dire car SET * ?????

Dans un UPDATE (simple)

UPDATE Nom_Table_A_Modifier
SET Nom_Champ1_A_Modifier2 = Nouvelle_Valeur2,
    Nom_Champ1_A_Modifier2 = Nouvelle_Valeur2,
    ...
WHERE Nom_Champ_Condition = Condition


Par exemple :

update ListeLivre
set Prix = 15
where IDLivre = 156423


dans cet exemple on met donc la valeur 15 dans le champ prix de la table ListeLivre si l'IDLivre = 156423

Tu dois donc dans ton programme parcourir les enregistrements à modifier et lancer cette requete.

On lance une requete comme celle la avec le methode ExecureNonQuery d'un Sqlcommand (en sqlserver) comme ceci

cn.Open()  'ouverture de ta connection

Dim cmd as SqlCommand = cn.CreateCommand()
cmd.CommandText "UPDATE  ListeLivre set Prix 15 where IDLivre = 156423"
cmd.ExecuteNonQuery()


les deux dernières lignes étant dans une boucle pour toi.

[2] Comme tu viens de le voir tu dois connaitre le détail des tables même pour un simple update.

[3] Le dataset est une collection de datatable contenant les données sur lesquelles tu veux travailler, le lien entre ce dataset et ta base de donnée devrait être un DataAdapter.

Le dataset retient les enregistrements qui ont été ajoutés, supprimés et modifiés. et par la methode update() du dataadapter, toutes les modifications sont faites en même temps.

ceci grace aux commande (insertcommand,deletecommande et updatecommande)

le
WHERE DeptNo = :oldDeptNo
veut dire que l'on met à jour le champ pour lequel le DeptNo de la base vaut le numero original lors du chargement de la table dans le dataset.

[4] avec ta methode [1] tu dois distinguer les cas et lancer soit un insert, soit un delete ou soit un update.

avec le dataadapter si tu définis bien tes trois commandes cela se fait par un simple da.update()

A mon avis cela vaut le coup d'apprendre le fonctionnement de l'update du dataadapter.

Bon dimanche




Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.

Merci cgandco 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cgandco
Messages postés
417
Date d'inscription
vendredi 22 février 2008
Dernière intervention
7 janvier 2018
0
Merci
J'ai oublié quelques ligne ....
    ...
        'Connection a la Base
        Private Connex As SQLiteConnection
        'Liste des noms des tables de la base
        Dim ListeTable as List(of String)
        'DataSet des tables de la base
        Dim _MyDataset as DataSet
        ....
        Try
            For Each NOM In ListeTable
                Dim Txte As String = "UPDATE " & NOM & " SET *"
                Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(Txte, Connex)                 adapter.Update(_MyDataset, NOM)
        
                adapter.Update(_MyDataset, NOM)
            Next
            MsgBox("La Sauvegarde du DataSet est effectuée ", MsgBoxStyle.Information)
        Catch
            MsgBox("La Sauvegarde du DataSet a Echouée ", MsgBoxStyle.Critical)
        End Try
        ...
Commenter la réponse de CGSI3
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
0
Merci
Bonjour,

Je suppose que tu initialises ton dataset avec un sqlitedataadapter (méthode fill), alors regarde la le fonctionnement de la méthode Update() du dataadapter et les propriétés updatecommand,insertcommand, et deletecommand.

ici par exemple


bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Commenter la réponse de cgandco
Messages postés
417
Date d'inscription
vendredi 22 février 2008
Dernière intervention
7 janvier 2018
0
Merci
Bonjour,
Merci pour ce lien cgandco
J'ai plusieurs questions:

[1] La commande "UPDATE TABLE " serait elle pas plus approprié?
ou peut on comprendre son fonctionnement?

[2] A ce que je comprend, a l'inverse de la méthode Fill du dataadapter, le fonctionnement de la méthode Update() requiert une connaissance en détail des champs du DataTable.

SQLiteCommand("UPDATE Dept SET DeptNo :DeptNo, DName :DName " & _
"WHERE DeptNo = :oldDeptNo", sqConnection)

Je veux mettre a jour tous les champs et l'ensemble des enregistrements.
A quoi correspond dans cette ligne "SET DeptNo = :DeptNo"

Est ce ici que l'on associe la désignation des champs du DataTable et ceux de la base?

[3] La clause "WHERE DeptNo = :oldDeptNo", correspond elle a un filtre sur les enregistrements a l'intérieur de la base ou entre le datatable et la base?

[4] Me faut il donc également distinguer (dans le datatable) les lignes Mise a jour, inséré et détruite entre son initialisation et sa sauvegarde pour effectuer ces changements dans la table.

Cordialement CGSI3
Commenter la réponse de CGSI3
Messages postés
417
Date d'inscription
vendredi 22 février 2008
Dernière intervention
7 janvier 2018
0
Merci
Bonsoir cgandco,
Merci pour cette réponse très détaillée et concrète.
Commenter la réponse de CGSI3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.