connection.Close()和connection.Dispose()有什么区别?

时间:2013-06-18 12:26:27

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

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

  • Close()
  • Dispose()

SQLiteDataReader对象相同。

有什么区别?

2 个答案:

答案 0 :(得分:21)

如果连接尚未关闭,

Dispose也会关闭连接,但在调用Close时,您可以再次重新打开连接。处理连接时无法进行此操作。

一般情况下,不要调用Close,而只需通过在using块中创建连接来隐式调用dispose:

using (var connection = new SqlConnection(...))
{
    // use connection here.
} // connection gets closed and disposed here.

答案 1 :(得分:5)

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

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

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

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

无论是否抛出异常,这都会自动为您处理连接。