我可以更新我的Sqlite数据库只有一次,如何克服这一点

本文关键字:一次 何克服 这一点 克服 Sqlite 我的 更新 数据库 我可以 | 更新日期: 2023-09-27 18:11:27

正如标题所说:我只能更新我的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

我可以更新我的Sqlite数据库只有一次,如何克服这一点

您没有关闭连接,这就是为什么它被锁定,您应该在using语句中完成数据库工作,该语句在连接完成时关闭连接。

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

这是using语句

的另一种用法
 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();
                }