我必须处理SQLiteCommand对象吗
本文关键字:对象 SQLiteCommand 处理 | 更新日期: 2023-09-27 18:03:47
如何处理SQLiteCommand
对象,在ExecuteScalar
、ExecuteNonQuery
和ExecuteReader
之后,我是否必须调用Dispose()
?
SQLiteCommand上的文档示例在在SQLiteTransaction中,示例处理SQLiteCommand对象。
不过,我总是关闭数据读取器对象。我的应用程序从许多线程访问数据库。
我最感兴趣的是不泄漏连接或干扰SQLite。我知道using
和IDisposable
使用
最好的做法是在完成IDisposable
后立即处理它的所有实现,因为它可能会使用非托管资源。
这应该使用using
-语句来完成,因为它包装了使用此对象的代码,并且在出现异常时也会对其进行处理。
using(var con = new SQLiteConnection(conString))
using(var cmd = new SQLiteCommand(con))
{
con.Open();
// ...
} // also closes the connection
如果它是一次性的,如果您不再使用它,请将其处理掉。最好的方法是,使用
using(SQLiteCommand cmd as new SQLiteCoammand())
{
...
}
因此,当离开使用范围时,它将被自动处理。
只需执行以下操作:
using(var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString))
using(var command = connection.CreateCommand())
{
command.CommandText = "...";
connection.Open();
command.ExecuteNonQuery();
}
不在命令上调用dispose不会有太坏的结果。然而,对其调用Dispose将阻止对终结器的调用,从而使调用Dispose成为性能增强。
using语句将对对象调用Dispose,即使发生绕过调用Close((的代码的异常。这样,您就不必仅仅为了关闭读卡器或连接而编写try/finaly块。您还可以避免这种百分之一的情况,即忘记编写正确的finally块。
这种百分之一的病例往往比人们想象的发生得更频繁