2015-09-04 1 views
1

Как говорится в названии: я могу только обновить базу данных SQLite один раз. Я использую этот код для создания базы данных и ее таблиц:Я могу обновить базу данных Sqlite только один раз, как преодолеть это?

public static void GenDB() 
    { 
     if (!System.IO.File.Exists("Key.sqlite")) 
     { 
      SQLiteConnection.CreateFile("Key.sqlite"); 
      SQLiteConnection m_dbConnection; 

      m_dbConnection = 
    new SQLiteConnection("Data Source=Key.sqlite;Version=3;"); 
      m_dbConnection.Open(); 

      string createTableQuery = @"CREATE TABLE IF NOT EXISTS [MyKey] (
         [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
         [Key] VARCHAR(2048) NULL 
        )"; 
      SQLiteCommand command = new SQLiteCommand(createTableQuery, m_dbConnection); 
      command.ExecuteNonQuery(); 

      try 
      { 
       SQLiteConnection dbConnection; 
       dbConnection = 
       new SQLiteConnection("Data Source=Key.sqlite;Version=3;"); 
       string sql = "insert into MyKey (Key) values ('yourkey')"; 
       SQLiteCommand commmand = new SQLiteCommand(sql, dbConnection); 
       dbConnection.Open(); 
       commmand.ExecuteNonQuery(); 
       MessageBox.Show("Done"); 
      } 
      catch 
      { 
       MessageBox.Show("Error with adding to item to your Database "); 
      } 
     } 

и это работало отлично

Проблема в этом коде:

try 
{ 
    string con = "Data Source=Key.sqlite;Version=3;"; 
    SQLiteConnection updata = new SQLiteConnection(con); 

    updata.Open(); 

    string sql = "UPDATE MyKey SET Key=('" + Textbox + "') WHERE ID=1"; 

    SQLiteCommand commmand = new SQLiteCommand(sql, updata); 
    commmand.ExecuteNonQuery(); 
    MessageBox.Show("Done"); 
} 
catch 
{ 
    MessageBox.Show("Error with updata to sql lite "); 
} 

Он работает в первый раз .. и когда Я пытаюсь построить его снова, я получаю ошибку с обновлением до DB сообщение об ошибке Database is locked

+3

, когда вы говорите, что вы получите сообщение об ошибке, им угадать вы ударяя 'MessageBox.Show («Ошибка с updata в SQL облегченный»);' чтобы увидеть, что происходит с ошибкой 'catch' to 'catch sqlException ex) {MessageBox.Show (ex.Message) Messagebox.Show (ex.StackTrace)}' это скажет вам, что такое ваша ошибка, и если вы можете сообщить нам об этом что ошибка тогда, мы можем помочь вам немного больше –

+1

i Получить 'База данных заблокирована' @SimonPrice –

+0

извините за то, что вы долго хотите вернуться к вам, можете ли вы отредактировать свой вопрос, чтобы дать полный стек nd сообщение об ошибке, пожалуйста, –

ответ

1

Вы не закрываете соединение, которое я поэтому при его блокировке вы должны выполнять свою работу с базой данных в операторе using, который закрывает соединение при его завершении.

using (SQLiteConnection sqlconn = new SQLiteConnection(ConnectionString)) 
{ 
    sqlconn.Open(); 
    using (SQLiteCommand cmd = new SQLiteCommand(sql, c)) 
    { 
    cmd.ExecuteNonQuery(); 
    } 
} 

это еще один способ использования с помощью заявления

SqlCommand sqlcmd = new SqlCommand(); 
       using (SqlConnection sqlconn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["myconnectionstringFromConfigFile"].ConnectionString)) 
       { 
        sqlcmd.Connection = sqlconn; 
        sqlconn.Open(); 
        sqlcmd.CommandType = CommandType.Text; 
        sqlcmd.CommandText = "sql statement"; 
        sqlcmd.ExecuteNonQuery(); 

       } 
+0

следует закрыть все подключения, я закрываю его этим способом, но он не работает @Simon Price –

+0

нет, используя используемую инструкцию, он закроет все это для вас –

+0

тот же ** попробуйте { с использованием (SQLiteConnection sqlconn = new SQLiteConnection («Источник данных = Key.sqlite; Версия = 3;»)) { sqlconn.Open(); string sql = "UPDATE MyKey SET Key = ('" + Textbox + "') ГДЕ ID = 1"; Использование (SQLiteCommand cmd = новый SQLiteCommand (sql, sqlconn)) { cmd.ExecuteNonQuery(); } } } catch (SQLiteException ex) { MessageBox.Show (ex.Message); } ** –

Смежные вопросы