无法将值插入数据库?(错误:数据库文件被锁定)

时间:2017-10-09 12:14:49

标签: c# sql sqlite

我在Unity中创建了一个sqlite数据库...并尝试连接此函数。

void AddScores(string conn)
    {
        IDbConnection dbconn;
        dbconn = (IDbConnection)new SqliteConnection(conn);
        dbconn.Open();

        using(IDbCommand dbCmd = dbconn.CreateCommand())
        {
            //    string sqlQuery = "SELECT Id FROM PickAndPlace ";
            string sqlQuery= "INSERT INTO PickAndPlace (Id) VALUES (324)";
            dbCmd.CommandText = sqlQuery;

            using(IDataReader reader = dbCmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    print(reader.GetInt32(0));
                }
                dbconn.Close();
                reader.Close();
                dbCmd.Dispose();
            }
        }
    }

如果我尝试插入值,则以下代码无效...并且显示此错误“数据库文件已锁定: 数据库已锁定“但如果我尝试选择,这样可以正常工作。那么我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

Sqlite通常接受单个"连接"。一旦一个应用程序连接到数据库,这意味着只是获取一个写锁定,没有其他应用程序可以访问它进行写入,但可以访问它进行读取。这就是你所看到的行为。有关其工作原理,各种锁定状态等的详细信息,请参阅File Locking And Concurrency Control in SQLite Version 3

但原则上,您只能打开一个连接。所以不知怎的,你有不止一个。您忘记关闭某些连接,或者多个线程或应用程序正在尝试修改它。或者可能发生了一些错误并使锁定文件处于错误状态。