2016-02-18 7 views
1

Когда я вызываю метод test() , код запускается до тех пор, пока он не достигнет Messagebox.show() Когда я пытаюсь вставить в таблицу «vandute», я получаю сообщение об ошибке «DATABASE LOCKED»Ошибка базы данных заблокирован SQLite C#

private void test() 
    { 
     int z; 
     SQLiteConnection dbcon = new SQLiteConnection("Data Source=stefanauto.psa;Version=3;"); 
     dbcon.Open(); 
     using (SQLiteCommand sql = new SQLiteCommand(dbcon)) 
     { 
      sql.CommandText = "select ID from clienti where CNP='" + cnp.Text + "'"; 

      z = Convert.ToInt32(sql.ExecuteScalar()); 


      MessageBox.Show(z.ToString());//The error begins after this line 
      sql.CommandText = "insert into vandute(ID_MASINA,ID_CLIENT)values(1,2)";//Id_MASINA,ID-CLIENT ARE integers 
      sql.ExecuteNonQuery(); 
     } 
    } 

Не могли бы вы объяснить мне, что я делаю неправильно?

+1

Я нашел решение [здесь] (http://stackoverflow.com/questions/22612790/sqlite-database-is-locked-on-insertion)! – SGS

ответ

1

Попробуйте переместить

dbcon.Open(); 

внутри using блока. Что-то вроде

using (SQLiteConnection c = new SQLiteConnection("Data Source=stefanauto.psa;Version=3;")) 
{ 
    c.Open(); 
    using (SQLiteCommand cmd = new SQLiteCommand(sql, c)) 
    { 
     //your code 
    } 
} 

или еще пытаются утилизировать соединение явно

public void DisposeConnection() 
{ 
    SQLiteConnection.Dispose(); 
    SQLiteCommand.Dispose(); 
    GC.Collect(); 
} 
+0

Я только переместил «SQLiteConnection dbcon = новый SQLiteConnection (« Источник данных = stefanauto.psa; Version = 3; »); в использовании и работал для первого запуска. После первого запуска я все равно получаю ту же ошибку. В моем примере я не понимаю, что означает sql для использования (SQLiteCommand cmd = новый SQLiteCommand (sql, c)) – SGS

1

Попробуйте создать новую команду;

private void test() 
{ 
    int z; 
    using (SQLiteConnection dbcon = new SQLiteConnection("Data Source=stefanauto.psa;Version=3;")) 
    { 
     dbcon.Open(); 
     using (SQLiteCommand sql = new SQLiteCommand(dbcon)) 
     { 
      sql.CommandText = "select ID from clienti where CNP='" + cnp.Text + "'"; 

      z = Convert.ToInt32(sql.ExecuteScalar()); 


      MessageBox.Show(z.ToString()); 
     } 

     using (SQLiteCommand sql = new SQLiteCommand(dbcon)) 
     { 
      sql.CommandText = "insert into vandute(ID_MASINA,ID_CLIENT)values(1,2)"; 
      sql.ExecuteNonQuery(); 
     } 
    } 
} 
Смежные вопросы