Enregistrer un dataset dans SQLite

Résolu
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018 - Modifié le 13 sept. 2018 à 13:39
Whismeril Messages postés 19097 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juillet 2024 - 21 sept. 2018 à 08:19
Bonjour,

Je dois m’emmêler les pinceaux et comme je n'avance pas, je demande votre aide XD

J'utilise un fichier dataset ou je charge mes données depuis SQLite.

Mes champs se chargent grâce à un BindingSource :
private void listDepot_SelectionChangeCommitted(object sender, EventArgs e)
        {
            this.pARAMETRAGE_RHTableAdapter.FillBy(this.gestionDesUtilisateursREFLEXDataSet.PARAMETRAGE_RH, new System.Nullable<long>(((long)(System.Convert.ChangeType((long)listDepot.SelectedValue, typeof(long))))));
        }


Je mets à jour mon dataset derrière un bouton quelconque :
gestionDesUtilisateursREFLEXDataSet.AcceptChanges();
gestionDesUtilisateursREFLEXDataSet.PARAMETRAGE_RH.AcceptChanges();
this.pARAMETRAGERHBindingSource.EndEdit();


J'arrive à en créer une nouvelle mais pas à mettre à jour une ligne précise.
Il me manque une commande pour pouvoir faire la même chose dans ma base SQLite ou alors j'ai oublié une étape...
J'ai en tête une commande comme pour SQL Serveur en utilisant LINQ (context.saveChange)

Si quelqu'un peu me mettre sur la bonne voix ça serait top.

Merci

ps : je n'ai pas forcément bien choisi mes noms de variable :/

--

3 réponses

Whismeril Messages postés 19097 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juillet 2024 660
13 sept. 2018 à 21:24
Bonjour

je suis peu adepte des bases de données, mais de Linq oui, donc quand j'ai dû utiliser une base SQlite, j'ai utilisé le package Nuget sqlite-net qui prend directement Linq en charge.


Attention cependant, pour une obscure raison, la requête différée de marche pas. Il faut forcer avec ToList() par exemple.


            connection = new SQLiteConnection(Chemin);

            List<UneClasse> collection = (from r in connection.Table<AutreClasse>().ToList()//si pas ToList, ça marche pas 
                                  where //.......
                                  select new UneClasse
                                  {
                                      .........
                                  }).ToList();

kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
14 sept. 2018 à 05:54
Le problème c'est que je travail sur une version Microsoft Visual Studio 2010 et ce package n'est pas dispo :(

J'ai beau chercher mais aucun moyen de mettre une ligne à jour en une ou 2 lignes. Du coup j'ai dans l'idée de supprimer la ligne et de la recréer avec les bons champs... C'est pas du jolie mais bon.
Ou alors écrire un paquet de ligne avec tout le tralala (connecteur, commande etc) pour faire cette modif.

J'me tâte.

En tout cas merci pour le tuyau, j'le garde de côté pour chez moi.

--
Whismeril Messages postés 19097 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juillet 2024 660
14 sept. 2018 à 07:11
Si tu ne peux pas l’installer via nuget, il existe sur github
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
14 sept. 2018 à 07:51
Compliqué a installé mais c'est une chose faite.
Dans ton exemple,
List<UneClasse> collection 
je dois préalablement créer une classe en référence à ma table ?
0
Whismeril Messages postés 19097 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juillet 2024 660
14 sept. 2018 à 08:16
Oui, voir ce tuto
https://www.journaldunet.com/developpeur/outils/tutoriel-sqlite.shtml

Ils utilisent le mode asynchrone, mais ça marche aussi en synchrone. Dans mon projet, je n’ai pas énormément de données alors je ne me suis pas « embêté » avec les thread
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
14 sept. 2018 à 08:22
Yes merci c'est ce qu'il me fallait pour comprendre.
Effectivement je dois créer une classe par table.
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
21 sept. 2018 à 07:09
Pour ceux a qui ça intéresse, la solution est toute bête....

Par exemple, derrière un bouton SAVE :
this.nomDuBindingSource.EndEdit();
nomTableAdapter.Update(nomDataSet);


Pour moi ça ne marchais pas car j'avais une ligne qui rechargé mon dataset avant modif....
Bref erreur toute bête.

@Whismeril, j'ai étudié ta solution mais tournant sous Visual Studio 2010 je suis très très limité et pour contourner les manquants comme la gestion de ASYNC c'est une horreur.

Pour info, je linq sans problème en SQLite grâce à mon dataset.

Merci !
--
Whismeril Messages postés 19097 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juillet 2024 660
Modifié le 21 sept. 2018 à 08:20
Ce qui compte c’est que tu aies trouvé une solution.
Pense à marquer le sujet résolu avec la roue dentée tout en haut du fil.
0
Rejoignez-nous