SQLite异常:数据库已锁定

时间:2017-11-13 08:46:45

标签: sqlite

我已经查看了“数据库被锁定”异常的所有问题,但没有解决我的问题。我在DBActions类中有一个静态函数,它在DB中插入一条记录,如下所示:

public static class DBActions
{
    // save col, value pairs in DB table
    public static int SaveInDB(string table, string[] cols, object[] vals)
    {
        int resultID = 0;

        string query = $"insert into {table} (";

        for (int i = 0; i < cols.Length - 1; i++)
        { // leave the last column coz comma does not follow it
            query += cols[i] + ", ";
        }

        query += cols[cols.Length - 1] + ") values (";

        for (int i = 0; i < cols.Length - 1; i++)
        {
            query += $"'{vals[i]}', ";
        }

        query += $"'{vals[vals.Length - 1]}')";
        //MessageBox.Show(query);

        using (SQLiteConnection con = new SQLiteConnection(Global.ConnectionString))
        {
            using (SQLiteCommand cmd = new SQLiteCommand(con))
            {
                try
                {
                    con.Open();

                    using (SQLiteTransaction trans = con.BeginTransaction())
                    {
                        cmd.CommandText = query;
                        cmd.ExecuteNonQuery();
                        resultID = (int)con.LastInsertRowId;

                        trans.Commit(); // raises the exception
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

                finally
                {
                    con.Close();
                    cmd.Dispose();
                }
            }
        }

        return resultID;
    }
}

每当我需要在任何表中保存一些记录时,我都会调用这个静态函数:

Global.StartTime = GetCurrentTimeStamp();

string[] cols = { "SampleID", "OperatorID", "StartTimeStamp"};
object[] vals = { SampleID, CurrentUser, Global.StartTime};
Global.ExpID = DBActions.SaveInDB("ExperimentSettings", cols, vals);

当我第一次调用它时,它会抛出“数据库被锁定”异常。对于所有其他人,它执行得很好。可能的原因是什么?我认为由于using语句,我的所有数据库对象都被正确处理掉了。

0 个答案:

没有答案