我必须处理SQLiteCommand对象吗

本文关键字:对象 SQLiteCommand 处理 | 更新日期: 2023-09-27 18:03:47

如何处理SQLiteCommand对象,在ExecuteScalarExecuteNonQueryExecuteReader之后,我是否必须调用Dispose()

SQLiteCommand上的文档示例在在SQLiteTransaction中,示例处理SQLiteCommand对象。

不过,我总是关闭数据读取器对象。我的应用程序从许多线程访问数据库。

我最感兴趣的是不泄漏连接或干扰SQLite。我知道usingIDisposable使用

我必须处理SQLiteCommand对象吗

最好的做法是在完成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块。

这种百分之一的病例往往比人们想象的发生得更频繁