J'écris un programme en C# qui doit insérer des données dans plusieurs tables. La première insertion renvoie un dernier insert rowid, qui est à son tour utilisé pour effectuer une insertion sur les autres tables. Dans le code pseudo:Insertion fiable avec SQLite
INSERT INTO TableFoo (Col2, Col3, Col4, etc.) VALUES (@Bla2, @bla3, @bla4);
Immédiatement après cet insert je reçois le dernier id d'insertion par:
SELECT last_insert_rowid() AS RowId;
je récupère la colonne RowId dans un datareader et le stocker dans un int "RowId". Enfin, j'insérer des tables supplémentaires comme:
INSERT INTO TableBar (FooId, Col2) VALUES (RowId, @BSomeMoreBla)");
La question: Si possible, je veux réaliser ce groupe d'inserts (et sélectionnez RowId) dans 1 transaction pour empêcher certaines données demi-enregistrée. Est-il possible d'utiliser une transaction dans ce scénario et quelle serait la méthode préférée?
Une transaction SQLite? Espace de noms System.Transactions de C#? Une troisième façon d'effectuer une base de données atomique multi-insert ...?
J'ai le System.Data.SQLite en cours d'utilisation depuis un certain temps déjà, et cela fonctionne parfaitement, mais je suis un total négligeable concernant les transactions. Voilà pourquoi je demande quelques conseils :). – Webleeuw
Ah ok, ça le rend beaucoup plus clair maintenant, merci. Mais le noyau de la question était en fait si un SELECT dans une transaction est possible et si je peux utiliser le select pour récupérer une valeur utilisée par les autres inserts, le tout dans la même transaction? – Webleeuw
Oui, tant que le select est enrôlé dans la transaction comme ci-dessus, vous devriez être bien – ryber