如何处理SQLiteCommand
对象,
在Dispose()
,ExecuteScalar
和ExecuteNonQuery
之后必须致电ExecuteReader
吗?
SQLiteCommand上的文档示例不会处理它 在SQLiteTransaction示例中,处理SQLiteCommand对象。
我总是关闭数据读取器对象。我的应用程序从许多线程访问数据库。
大多数情况下,我对不泄漏连接或干扰SQLite感兴趣。我知道using
和IDisposable
用法
答案 0 :(得分:9)
最好的做法是在完成后立即处理实现IDisposable
的所有内容,因为它可能会使用非托管资源。
这应该使用using
-statement来完成,因为它包装了使用此对象的代码,并且因为它也会在异常的情况下处理它。
using(var con = new SQLiteConnection(conString))
using(var cmd = new SQLiteCommand(con))
{
con.Open();
// ...
} // also closes the connection
答案 1 :(得分:2)
如果是一次性的,如果您不再使用它,请将其丢弃。 最好的是,使用
using(SQLiteCommand cmd as new SQLiteCoammand())
{
...
}
因此在离开使用范围时会自动处理。
答案 2 :(得分:1)
这样做:
using(var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString))
using(var command = connection.CreateCommand())
{
command.CommandText = "...";
connection.Open();
command.ExecuteNonQuery();
}
不在命令上调用dispose也不会做太糟糕的事情。然而,在它上面调用Dispose会压缩对终结器的调用,使调用dispose成为一种性能增强。
答案 3 :(得分:1)
即使发生绕过调用Close()的代码的异常,using语句也会对对象调用Dispose。这样您就不必编写try / finally块来关闭阅读器或连接。您还可以避免在忘记编写正确的finally块时出现这种情况。
这种百分之一的案例比人们想象的更容易发生