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

C# Discussion :

Sqlite SQLite error (10): delayed 150ms for lock/sharing conflict


Sujet :

C#

  1. #1
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut Sqlite SQLite error (10): delayed 150ms for lock/sharing conflict
    Je travaille avec Sqlite.

    Lorsque je veux insérer des lignes dans une table, je me ramasse de temps en temps ce message dans la fenêtre d'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLite error (10): delayed 150ms for lock/sharing conflict
    Voici un exemple de mon code :

    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
     
    try
    {
    	OracleCommand cmdOracle = varGlobals.dbOracle.CreateCommand();
    	cmdOracle.CommandText = "SELECT * FROM SITES";
     
    	OracleDataReader drOra = cmdOracle.ExecuteReader();
     
    	varGlobals.dbSqlite.BeginTransaction();
    	while (drOra.Read())
    	{
    		using (SQLiteCommand SqliteCmd = new SQLiteCommand(varGlobals.dbSqlite.SqliteConnection))
    		{
    			SqliteCmd.CommandText = "INSERT INTO SITES (NUMSITE,CODESITE,LIBELLE) VALUES(@NUMSITE,@CODESITE,@LIBELLE)";
     
    			SqliteCmd.Parameters.Add("@NUMSITE", DbType.Int32);
    			SqliteCmd.Parameters[0].Value = int.Parse(drOra["NUMSITE"].ToString());
     
    			SqliteCmd.Parameters.Add("@CODESITE", DbType.String);
    			SqliteCmd.Parameters[1].Value = drOra["CODESITE"].ToString();
     
    			SqliteCmd.Parameters.Add("@LIBELLE", DbType.String);
    			SqliteCmd.Parameters[2].Value = drOra["LIBELLE"].ToString();
     
    			SqliteCmd.ExecuteNonQuery();
    		}
    	}
     
    	varGlobals.dbSqlite.CommitTransaction();
     
    	drOra.Close();
    	drOra.Dispose();
    }
    catch (Exception ex)
    {
    	throw ex;
    }
    Avant cette fonction j'effectue un delete pour vider la table.

    Quelqu'un a t'il une idée ?
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je sais pas si c'est lié, mais plutôt que de créer une commande à chaque itération, crée la commande au début, et change juste ses paramètres à chaque itération.

    De plus, ta gestion de la transaction n'est pas bonne : si tu as une erreur dans la boucle, il n'y aura pas de rollback automatique. Il faut faire un using sur l'objet transaction.

    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
     
    try
    {
    	using (OracleCommand cmdOracle = varGlobals.dbOracle.CreateCommand())
        {
            cmdOracle.CommandText = "SELECT * FROM SITES";
     
            using (OracleDataReader drOra = cmdOracle.ExecuteReader())
            {
     
                using (var transaction = varGlobals.dbSqlite.SqliteConnection.BeginTransaction())
                {
                    using (SQLiteCommand SqliteCmd = new SQLiteCommand(varGlobals.dbSqlite.SqliteConnection))
                    {
                        SqliteCmd.CommandText = "INSERT INTO SITES (NUMSITE,CODESITE,LIBELLE) VALUES(@NUMSITE,@CODESITE,@LIBELLE)";
     
                        SqliteCmd.Parameters.Add("@NUMSITE", DbType.Int32);             
                        SqliteCmd.Parameters.Add("@CODESITE", DbType.String);
                        SqliteCmd.Parameters.Add("@LIBELLE", DbType.String);
                        SqliteCmd.Transaction = transaction;
                        SqliteCmd.Prepare();
     
                        while (drOra.Read())
                        {
                            SqliteCmd.Parameters[0].Value = int.Parse(drOra["NUMSITE"].ToString());
                            SqliteCmd.Parameters[1].Value = drOra["CODESITE"].ToString();
                            SqliteCmd.Parameters[2].Value = drOra["LIBELLE"].ToString();
     
                            SqliteCmd.ExecuteNonQuery();
                        }
                    }
     
                    transaction.Commit();
                }
            }
    	}
    }
    catch (Exception ex)
    {
    	throw ex;
    }

  3. #3
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Tout à fait d'accord avec toi Tomlev. Ici c'est du code remanié que j'ai trouvé sur le net qui normalement corrigeait le problème datant de ... 2011.

    Effectivement je crée ma commande en dehors de la boucle et je change juste les paramètres avant d'exécuter un executecommand.

    Mais j'ai trouvé la source du problème qui est vraiment toute conne : mon projet se trouve dans mon répertoire dropbox sur mon pc, et ce qui lockait le fichier était tout simplement la synchro ;-( Y ai vraiment pas pensé de suite et franchement la je suis honteux
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. Sqlite returned : error code = 14
    Par cadoudal56 dans le forum Android
    Réponses: 1
    Dernier message: 29/05/2011, 09h43
  2. Réponses: 2
    Dernier message: 08/06/2006, 10h43
  3. [SQLite] SQLite et champ de type ENUM
    Par Linaa dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/05/2006, 13h41
  4. Réponses: 4
    Dernier message: 22/04/2006, 15h11
  5. Waiting for locked row
    Par BlackMinou dans le forum Oracle
    Réponses: 4
    Dernier message: 24/10/2005, 17h57

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