| 百度上都说是多线程同时写入数据库时造成的锁问题,我分析发现都是执行了事务后再执行其他数据库的操作就有机率报“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();
            }
        }
 我估计是有其他线程正在对数据库进行操作,同时再执行这个事务的时候就会造成的锁问题。
 请问怎么解决啊?怎么让执行事务的时候不让其他线程去操作数据库呢?谢谢
 
 |