13

我注意到该SQLiteConnection对象System.Data.SQLite拥有两个类似的方法:

  • Close()
  • Dispose()

对象也一样SQLiteDataReader

有什么区别 ?

4

2 回答 2

27

Dispose如果连接没有关闭,也会关闭连接,但是在调用 时Close,您可以再次重新打开连接。当连接被释放时,这是不可能的。

通常,不要调用Close,而只是通过将连接的创建包装在using块中来隐式调用 dispose:

using (var connection = new SqlConnection(...))
{
    // use connection here.
} // connection gets closed and disposed here.
于 2013-06-18T12:28:44.970 回答
8

Connection.Close() 将简单地关闭与连接字符串中定义的服务器的连接。在此之后可以使用/重新打开连接。

Connection.Dispose()将完全清理,删除所有非托管资源,防止再次使用该连接。一旦调用了处理,您就不应再尝试使用该对象。在Dispose(),Close()` 中肯定也会被调用。

如果可能的话,我会推荐using使用这样的语法,以确保正确清理内容:

using(SqlLiteConnection conn = new SqlLiteConnection(...))
{
   // Do work here
}

这将自动为您处理连接,无论是否引发异常。

于 2013-06-18T12:30:33.360 回答