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

SQLite Discussion :

Transaction SQLite c#


Sujet :

SQLite

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut Transaction SQLite c#
    Bonjour, bonjour,

    Je suis en train de coder un logiciel en c# à l'aide de visual studio, qui utilise une liaison avec une base de donnée SQLite. Pour coder de façon propre ^^, je dois faire des transactions lorsque je fais plusieurs plusieurs insertions à la suite.

    Le code ne me pose pas trop de problème par contre c'est la façon de procéder, je m'explique.

    Je commence par faire une première insertion, qui génère un id en auto-incrément. Et lors de ma deuxième insertion j'ai besoin d'insérer l'id en question.

    Or lorsque je fais des transactions, vu qu'on ne vient pas vraiment écrire dans la base, il ne me fait aucune erreur, mais me fait une insertion où le champs ou il devrait y avoir l'id est vide...

    Donc il me faudrait un moyen de pouvoir retourner cet ID par la première requête... Enfin je sais pas trop comment faire là !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 427
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,

    Je crois que tu devrais trouver (si j'ai bien compris ton problème) ton bonheur avec

    http://www.sqlite.org/c3ref/last_insert_rowid.html

    Je crois que cette fonction est visible dans l'interface c# (Désolé, je ne pratique plus...

    Cordialement

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Ca fonctionne mais pas avec les transactions...

    Autres idées ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 427
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,

    Pourtant...

    Je fais (en pseudo code...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Exéctuter sql ("Begin Transaction")
     
    Boucler sur 
         Insertion d'une ligne dans la base
         Récupération du LastRowId 
         Insertion d'une ligne dans une table liée en utilisant le résultat du lastRowid
    Fin Boucle
     
    Exécuter Sql ("Commit")

    Et ma foi, les tables liées via le Rowid sont bien liées.
    Quel schéma utilises tu?

    Cordialement

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 427
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,

    Ça marche aussi également avec la fonction SQL last_insert_rowid() http://www.sqlite.org/lang_corefunc.html
    last_insert_rowid() The last_insert_rowid() function returns the ROWID of the last row insert from the database connection which invoked the function. The last_insert_rowid() SQL function is a wrapper around the sqlite3_last_insert_rowid() C/C++ interface function.
    Voici un exemple:

    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
    CREATE TABLE [Table1] ([Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    [Val001] TEXT NULL);
     
    CREATE TABLE [TABLE2] ([INB] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    [VAL02] INTEGER NOT NULL, --Référence vers table1 sur le RowId
    [VAL03] TEXT NULL)  ;
     
    BEGIN TRANSACTION;
    INSERT INTO TABLE1 (val001) VALUES ('Test');
    insert into table2 (val02, val03) values (last_insert_rowid(),'Test');
    INSERT INTO TABLE1 (val001) VALUES ('Test1');
    insert into table2 (val02, val03) values (last_insert_rowid(),'Test1');
    INSERT INTO TABLE1 (val001) VALUES ('Test2');
    insert into table2 (val02, val03) values (last_insert_rowid(),'Test2');
    INSERT INTO TABLE1 (val001) VALUES ('Test3');
    insert into table2 (val02, val03) values (last_insert_rowid(),'Test3');
    commit;
    Donne
    1|Test
    2|Test1
    3|Test2
    4|Test3
    Donne
    1|1|Test
    2|2|Test1
    3|3|Test2
    4|4|Test3
    Ce qui démontre bien que l'on peut l'utiliser dans le cadre de transaction (ou pas d'ailleurs)

    Cordialement

Discussions similaires

  1. Transactions avec MySQL/SQLite/OCI
    Par manu007 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/03/2011, 14h10
  2. sqlite plusieurs requête dans une transaction
    Par ekremyilmaz dans le forum Général Python
    Réponses: 5
    Dernier message: 23/06/2009, 16h42
  3. [SQLITE][TRANSACTION] transaction répartie entre threads
    Par nannous dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 16/11/2006, 10h24
  4. [SQLITE]transaction répartie entre threads
    Par nannous dans le forum SQLite
    Réponses: 2
    Dernier message: 15/11/2006, 14h12
  5. [SQLITE] syntaxe d'une transaction
    Par nannous dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 30/10/2006, 10h34

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