我是否必须处理SQLiteCommand对象?

时间:2013-03-14 11:39:10

标签: c# sqlite .net-3.5 system.data.sqlite

如何处理SQLiteCommand对象, 在Dispose()ExecuteScalarExecuteNonQuery之后必须致电ExecuteReader吗?

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

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

大多数情况下,我对不泄漏连接或干扰SQLite感兴趣。我知道usingIDisposable用法

4 个答案:

答案 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块时出现这种情况。

这种百分之一的案例比人们想象的更容易发生