假面
会员
- 已加入
- 2020年11月30日
- 留言内容
- 16
- 编程经验
- 1-3
大家好。
我在c#SQLite数据更新和创建中遇到一些问题。
我在C#Windows窗体应用程序中将SQLite用作数据库。
顺便说一句,有时候我有一个"database is locked"当我尝试插入或更新数据时,SQLite中出现错误。
在google上搜索方式时,我知道它将能够发生,因为多线程正在工作或数据库正在处理中。
但是我找不到哪个线程或进程损害了此数据库的正确更新。
我想防止错误并最终尽快解决此问题。
谢谢你的时间。
我在c#SQLite数据更新和创建中遇到一些问题。
我在C#Windows窗体应用程序中将SQLite用作数据库。
顺便说一句,有时候我有一个"database is locked"当我尝试插入或更新数据时,SQLite中出现错误。
在google上搜索方式时,我知道它将能够发生,因为多线程正在工作或数据库正在处理中。
但是我找不到哪个线程或进程损害了此数据库的正确更新。
我想防止错误并最终尽快解决此问题。
谢谢你的时间。
C#:
static SQLiteConnection CreateConnection(string dbName)
{
SQLiteConnection sqlite_conn;
// Create a new database connection:
sqlite_conn = new SQLiteConnection("Data Source=" + dbName + ".db; PRAGMA journal_mode = WAL; Version = 3; New = True; Compress = True; Connection Timeout=0 ");
// Open the connection:
try
{
sqlite_conn.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return sqlite_conn;
}
sqlite_conn = CreateConnection(constants.dbName);
InsertLog(sqlite_conn, 2, "xxx", "yyyyy");
public void InsertLog(SQLiteConnection conn, int logType, string logTitle, string logContent, string logContent_2 = "")
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
try
{
DateTime logDate = DateTime.Now;
SQLiteCommand sqlite_cmd;
string Createsql = "INSERT INTO " + constants.tbNames[14] + " (logType, logTitle, logContent, logContent_2, logDate) VALUES (@logType, @logTitle, @logContent, @logContent_2, @logDate)";
sqlite_cmd = conn.CreateCommand();
//sqlite_cmd.CommandTimeout = 0;
sqlite_cmd.CommandText = Createsql;
sqlite_cmd.Parameters.AddWithValue("@logType", logType);
sqlite_cmd.Parameters.AddWithValue("@logTitle", logTitle);
sqlite_cmd.Parameters.AddWithValue("@logContent", logContent);
sqlite_cmd.Parameters.AddWithValue("@logContent_2", logContent_2);
sqlite_cmd.Parameters.AddWithValue("@logDate", logDate);
sqlite_cmd.ExecuteNonQuery();
}
catch (Exception e)
{
conn.Close();
//Console.WriteLine("db_error==" + e);
return;
}
conn.Close();
return;
}
由主持人最后编辑: