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 :

Erreur de suppression dans une base de données SQLite en C#


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Erreur de suppression dans une base de données SQLite en C#
    Salut à tous, je suis nouveau dans le forum, et j'aimerai bien que quelqu'un puisse m'aider… au fait, je développe en C#, et j'ai un problème avec la base de données créée en SQLite en ce qui concerne la suppression des données dans une table. Lorsque j'essaye de supprimer une donnée, j'ai ce message d'erreur :

    System.Data.SQLite.SQLiteException (0x80004005) : database is locked
    database is locked
    à System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
    à System.Data.SQLite.SQLiteDataReader.NextResult()
    à System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
    à System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
    à System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)
    à System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
    à ProjetAmba.Form6.SupprimerEleve() dans d:\Mes documents privés\Documents Mont-Amba\ProjetAmba\ProjetAmba\Form6.cs:ligne 108
    De fois la suppression marche à merveille après quelques temps de repos, mais cette erreur apparait si souvent. Aidez-moi svp car je suis vraiment bloqué et je ne sais comment m'en sortir… le code source pour la suppression est :

    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
    public void SupprimerEleve()
            {
                try
                {
                    SQLiteConnection connexion = new SQLiteConnection("Data Source = GSMA.db; Version = 3;");
                    connexion.Open();
                    SQLiteCommand recherche = new SQLiteCommand("SELECT MatriculeEleve FROM Eleve", connexion);
                    SQLiteDataReader dr = recherche.ExecuteReader();
                    string matricule = "";
                    while (dr.Read())
                    {
                        if (dr[0].ToString().Equals(txtMatricule.Text))
                        {
                            matricule = dr[0].ToString();
                            break;
                        }
                    }
                    if ((matricule.Equals(txtMatricule.Text)) && (!txtMatricule.Text.Equals(string.Empty)))
                    {
                        SQLiteCommand commande = new SQLiteCommand("DELETE FROM Eleve WHERE MatriculeEleve = '" + txtMatricule.Text + "'", connexion);
                        commande.ExecuteNonQuery();
                        MessageBox.Show("Elève supprimé !", "Suppression Elève", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        if (txtMatricule.Text.Equals(string.Empty))
                        {
                            MessageBox.Show("Entrez un numéro matricule svp !", "Erreur Matricule", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        else
                        {
                            MessageBox.Show("Ce numéro matricule n'existe pas !", "Matricule inexistant", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }
                    connexion.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(string.Empty + ex, "Erreur Suppression", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
    Merci d'avance pour votre aide…

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tout d'abord, lorsque tu postes un code, n'hésite pas à utiliser les balises appropriées. Cela permet d'avoir un code beaucoup plus lisible

    A vue de nez, je dirais que c'est un problème de connexion restant ouverte.

    En effet, une ligne comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLiteConnection connexion = new SQLiteConnection("Data Source = GSMA.db; Version = 3;");
    créée une nouvelle connexion. La connexion créée implémente l'interface IDisposable qui indique qu'il faut libérer des ressources (via un appel à connexion.Dispose()) dès lors que l'on en a plus besoin.

    Une bonne approche ici sera d'utiliser le mot clé "using" qui permet de gérer ce type de ressources :
    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
    42
    43
    44
     
    public void SupprimerEleve()
    {
      try
      {
        using(SQLiteConnection connexion = new SQLiteConnection("Data Source = GSMA.db; Version = 3;"))
        {
          connexion.Open();
          SQLiteCommand recherche = new SQLiteCommand("SELECT MatriculeEleve FROM Eleve", connexion);
          SQLiteDataReader dr = recherche.ExecuteReader();
          string matricule = "";
          while (dr.Read())
          {
            if (dr[0].ToString().Equals(txtMatricule.Text))
            {
              matricule = dr[0].ToString();
              break;
            }
          }
          if ((matricule.Equals(txtMatricule.Text)) && (!txtMatricule.Text.Equals(string.Empty)))
          {
            SQLiteCommand commande = new SQLiteCommand("DELETE FROM Eleve WHERE MatriculeEleve = '" + txtMatricule.Text + "'", connexion);
            commande.ExecuteNonQuery();
            MessageBox.Show("Elève supprimé !", "Suppression Elève", MessageBoxButtons.OK, MessageBoxIcon.Information);
          }
          else
          {
            if (txtMatricule.Text.Equals(string.Empty))
            {
              MessageBox.Show("Entrez un numéro matricule svp !", "Erreur Matricule", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
              MessageBox.Show("Ce numéro matricule n'existe pas !", "Matricule inexistant", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
          }
          connexion.Close();
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(string.Empty + ex, "Erreur Suppression", MessageBoxButtons.OK, MessageBoxIcon.Warning);
      }
    }
    Bien évidemment, il faut que les ressources soient correctement gérées dans tout ton programme ! Pas juste au niveau de la méthode qui te génère une erreur...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci, je vais essayer...

Discussions similaires

  1. [Débutant] Problème de suppression dans une base de donnée.
    Par youssef.farassi dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/04/2016, 15h32
  2. Gérer dess images dans une base de données SQLite
    Par noftal dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/06/2015, 11h55
  3. Selection dans une base de données sqlite
    Par moudjames23 dans le forum Android
    Réponses: 5
    Dernier message: 09/06/2015, 20h23
  4. Suppression de tables dans une base de données Mysl
    Par Furius dans le forum Requêtes
    Réponses: 6
    Dernier message: 07/06/2013, 10h34
  5. Recherche classe pour ajout/modif/suppression d'articles dans une base de donnée
    Par will89 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/02/2007, 11h59

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