有一个简单的代码
var insert =
@"INSERT INTO [files] (
[Name],
[FullName],
[MD5])
VALUES (@Name, @FullName, @MD5);";
using (var con = _db.OpenConnection())
{
using (var cmd = con.CreateCommand())
{
cmd.CommandText = insert;
cmd.Parameters.AddWithValue("@Name", item.Name);
cmd.Parameters.AddWithValue("@FullName", item.FullName);
cmd.Parameters.AddWithValue("@MD5", item.MD5);
cmd.ExecuteNonQuery();
}
}
应用程序在执行时挂起一段时间
cmd.ExecuteNonQuery();
然后失败,出现异常“数据库已锁定”。为什么会这样呢?应用程序不是多线程的。数据库文件是刚刚创建的。
问题解决了。在此代码之前,已调用SqlCommand.ExecuteReader()。尽管创建了该读取器的连接和命令已被处置,但该读取器本身并未被处置。用“ using(reader)”修复后,连接已正确关闭,上述错误消失了。
总计:即使显式处理了connection和SqlCommand,DataReader仍然可以保持连接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句