如何看待SQLiteCommand
对象,我必须调用Dispose()
后ExecuteScalar
, ExecuteNonQuery
和ExecuteReader
或不?
在文档例如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它会剿调用的终结,使得调用处理性能增强。
即使发生异常绕过调用Close()方法的代码使用语句将调用Dispose的对象上。 这样,您就不必写一个try / finally块只是为了关闭读者或连接。 您还避免这种1英寸-100的情况下,您忘了写正确的finally块。
这种1英寸-100病例有发生的倾向更加频繁地比人们想象