我可以更新我的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
您没有关闭连接,这就是为什么它被锁定,您应该在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();
}