百度上都说是多线程同时写入数据库时造成的锁问题,我分析发现都是执行了事务后再执行其他数据库的操作就有机率报“database is locked”这个错,代码:
[C#] 纯文本查看 复制代码 public static void UpdateTableTran(string[] key, string[] value, string[] id)
{
lock (_Obj)
{
SQLiteParameter[] para = { new SQLiteParameter("@value"), new SQLiteParameter("@id"), };
SQLiteConnection conn = new SQLiteConnection(Constring);
SQLiteCommand cmd = new SQLiteCommand(conn);
if (conn.State != ConnectionState.Open) conn.Open();
SQLiteTransaction tran = conn.BeginTransaction(IsolationLevel.Serializable);
for (int j = 0; j < key.Length; j++)
{
string sql = string.Format("update mytable set {0}=@value where id=@id", key[j]);
para[0].Value = value[j];
for (int i = 0; i < id.Length; i++)
{
para[1].Value = id[i];
cmd.CommandText = sql;
cmd.Parameters.AddRange(para);
cmd.ExecuteNonQuery();
}
}
try
{
tran.Commit();
}
catch (Exception ex)
{
throw ex;
}
tran.Dispose();
cmd.Dispose();
conn.Close();
}
}
我估计是有其他线程正在对数据库进行操作,同时再执行这个事务的时候就会造成的锁问题。
请问怎么解决啊?怎么让执行事务的时候不让其他线程去操作数据库呢?谢谢
|