C # SQLite, la firebase database étant laissée verrouillée après une lecture

J’ai lu certains des articles liés à ce sujet et je n’ai pas bien compris. Ce qui se passe, c’est qu’après cet access à la firebase database, celle-ci est laissée verrouillée pour pouvoir être lue mais non écrite. Après avoir quitté l’application, la firebase database est à nouveau déverrouillée. Pouvez-vous regarder cela et me parler comme si j’étais ignorant, signaler l’erreur de ma façon de gérer cela?

public static Partner GetOnePartner(ssortingng code) { Partner partner = new Partner(); SQLiteConnection connection = GroomwatchDB.GetConnection(); ssortingng sqlStatement = "SELECT * FROM partners WHERE partner_code = @partner_code"; SQLiteCommand command = new SQLiteCommand(sqlStatement, connection); command.Parameters.Add(new SQLiteParameter("@partner_code")); command.Parameters["@partner_code"].Value = code; try { connection.Open(); SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow); if(reader.Read()) { partner.Code = reader["partner_code"].ToSsortingng(); partner.Last_name = reader["last_name"].ToSsortingng(); partner.First_name = reader["first_name"].ToSsortingng(); partner.Pay_rate = (double)reader["pay_rate"]; partner.Active = reader["active"].ToSsortingng(); } else { partner.Code = code; partner.Last_name = "Not Found"; } } catch (SQLiteException ex) { throw ex; } finally { connection.Close(); } return partner; } 

Vous devez utiliser correctement votre connexion en utilisant le modèle IDisposable .

En fait, chaque classe qui implémente l’interface IDisposable doit être appelée avec un utilisateur. Cela garantit que les méthodes Dispose() sont appelées et que les ressources non gérées sont effacées (et vous ne vous retrouvez pas avec un fichier ouvert):

 public static Partner GetOnePartner(ssortingng code) { Partner partner = new Partner(); ssortingng sqlStatement = "SELECT * FROM partners WHERE partner_code = @partner_code"; using(SQLiteConnection connection = GroomwatchDB.GetConnection()) using(SQLiteCommand command = new SQLiteCommand(sqlStatement, connection)) { command.Parameters.Add(new SQLiteParameter("@partner_code")); command.Parameters["@partner_code"].Value = code; connection.Open(); using(SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow)) { if(reader.Read()) { partner.Code = reader["partner_code"].ToSsortingng(); partner.Last_name = reader["last_name"].ToSsortingng(); partner.First_name = reader["first_name"].ToSsortingng(); partner.Pay_rate = (double)reader["pay_rate"]; partner.Active = reader["active"].ToSsortingng(); } else { partner.Code = code; partner.Last_name = "Not Found"; } } } return partner; } 

Références :

  • Utilisation correcte de l’interface IDisposable
  • Dois-je supprimer les objects SQLiteCommand?
  • SqlConnection SqlCommand SqlDataReader IDisposable