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

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

  • Close()
  • Dispose()

对于SQLiteDataReader对象也是如此。

有什么不同 ?

如果连接尚未关闭, Dispose也会关闭连接,但是当调用Close ,您可以再次重新打开连接。 当处理连接时,这是不可能的。

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

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

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

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

如果可能的话,我建议using的using语法,以确保正确清理事物:

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

无论抛出exception,这都会自动为您处理连接。