Otrzymuję Baza danych jest zablokowana wyjątek od SQLite tylko w przypadku niektórych zapytań.Baza danych SQLite Zablokowany wyjątek
Poniżej znajduje się mój kod: Po uruchomieniu dowolnego polecenia select działa poprawnie.
Kiedy wykonuję każde polecenie zapisu na tabeli Jobs
, to również działa poprawnie.
Działa to dobrze:
ExecuteNonQuery("DELETE FROM Jobs WHERE id=1");
Ale tak samo jakbym wykonywania kwerend dla Employees
tabeli to rzuca wyjątek, który baza danych jest zablokowana.
ta rzuca wyjątek:
ExecuteNonQuery("DELETE FROM Employees WHERE id=1");
Poniżej są moje funkcje:
public bool OpenConnection()
{
if (Con == null)
{
Con = new SQLiteConnection(ConnectionString);
}
if (Con.State == ConnectionState.Closed)
{
Con.Open();
//Cmd = new SQLiteCommand("PRAGMA FOREIGN_KEYS=ON", Con);
//Cmd.ExecuteNonQuery();
//Cmd.Dispose();
//Cmd=null;
return true;
}
if (IsConnectionBusy())
{
Msg.Log(new Exception("Connection busy"));
}
return false;
}
public Boolean CloseConnection()
{
if (Con != null && Con.State == ConnectionState.Open)
{
if (Cmd != null) Cmd.Dispose();
Cmd = null;
Con.Close();
return true;
}
return false;
}
public Boolean ExecuteNonQuery(string sql)
{
if (sql == null) return false;
try
{
if (!OpenConnection())
return false;
else
{
//Tx = Con.BeginTransaction(IsolationLevel.ReadCommitted);
Cmd = new SQLiteCommand(sql, Con);
Cmd.ExecuteNonQuery();
//Tx.Commit();
return true;
}
}
catch (Exception exception)
{
//Tx.Rollback();
Msg.Log(exception);
return false;
}
finally
{
CloseConnection();
}
}
To jest wyjątek: Na linii 103: Cmd.ExecuteNonQuery();
Wyjątek Znaleziono: Typ: System. Data.SQLite.SQLiteException Wiadomość: baza danych jest zablokowana Baza danych jest zablokowana Źródło: System.Data.SQLite
StackTrace: co System.Data.SQLite.SQLite3.Step (SQLiteStatement stmt) na System.Data.SQLite.SQLiteDataReader.NextResult() na System.Data .SQLite.SQLiteDataReader..ctor (cmd SQLiteCommand, CommandBehavior zachowują) na System.Data.SQLite.SQLiteCommand.ExecuteReader (zachowanie CommandBehavior) na System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() na TimeSheet6.DbOp.ExecuteNonQuery (String sql) w d: \ Projects \ C# Applications \ Completed Projects \ TimeSheet6 \ TimeSheet6 \ DbOp.cs: line 103
Upewnij się, że zamkniesz połączenie, które wykonuje Twoje żądanie. –
Tak, również zamknąłem wszystkie połączenia i rozłożyłem obiekty poleceń. – coding
Zrobiłem dużo debugowania za tym. To nie wydaje się być problemem otwartego połączenia. – coding