更新sqlite记录时C#程序冻结

时间:2016-05-22 22:39:44

标签: c# sqlite sql-update

我需要帮助,

我有一张只有3条记录的表格,我只想更新其中一条,

我正在尝试使用SQLite浏览器的SQL命令,它完美地工作

但是当我在C#中使用相同的SQL时,程序会冻结(错误的例外只会冻结)。

这就是行:

query = new SQLiteCommand();
query.CommandText = "UPDATE athletes SET finishing_time = 123123123 WHERE epc = 'E2:00:30:73:99:02:01:31:16:70:6A:A3'";
query.Connection = m_dbConnection;
query.ExecuteNonQuery();

我在一系列方法中试过这个,

我尝试过SQLite参数,

我尝试了字符串格式化,我也尝试了如上所述的直接方法。

他们都引发了同样的问题,节目冻结。

这是我第一次使用sqlite和c#。

所以我希望我能在这里找到帮助。

更新:冻结后我等了大约3到4分钟,我得到异常数据库被锁定。

2 个答案:

答案 0 :(得分:2)

找到它,

我有和SQLiteDataReader对象打开导致问题。 我使用{}将SQLiteDataReader放在里面,问题就解决了。

答案 1 :(得分:0)

  

冻结后我等了大约3到4分钟,我得到了例外   数据库被锁定。

这表明运动员桌上存在死锁(或锁定未释放)。是否有其他查询访问此表?如果是,请在帖子上显示。

如果您在SQLite浏览器上使用语法BEGIN或BEGIN TRANSACTION,请确保您有相应的COMMIT或END TRANSACTION,因为如果缺少后者,则不会释放锁定,这可能是您的应用程序无法解决的原因访问所述表。要解决此问题,您可以重置SQLite服务并确保避免上述错误。

例如:

BAD(锁定不会被释放)

BEGIN TRANSACTION

UPDATE athletes SET finishing_time = 123123123 WHERE epc = 'E2:00:30:73:99:02:01:31:16:70:6A:A3'

GOOD(锁定将被释放)

BEGIN TRANSACTION

    UPDATE athletes SET finishing_time = 123123123 WHERE epc = 'E2:00:30:73:99:02:01:31:16:70:6A:A3'

COMMIT

编辑:这只是一个想法所以没有投票请xD