c# SQL何时/如何关闭连接
本文关键字:何关闭 连接 SQL 何时 | 更新日期: 2023-09-27 18:13:11
我使用的是以下代码:
public class SQLConnection : IConnection
{
private SqlConnection _sqlConnection = null;
//bunch of interface implementations for my project
//the destructor
~SQLConnection()
{
if(_sqlConnection != null)
{
if(_sqlConnection.State == ConnectionState.Open)
{
_sqlConnection.Close();
}
_sqlConnection.Dispose();
}
}
}
这个工作很好,直到前一段时间,当我开始收到这个错误:内部。net框架数据提供程序错误1
在谷歌了一下之后,我发现了这个链接(警告部分),我想这就是发生在我身上的事情。我的类每次都在管理连接状态的打开和关闭,但现在看来我不能以这种方式管理它,有没有其他方法可以做到这一点,而不必去到我使用连接的每个函数并显式地调用connection.Close()
?
始终使用'using'来安全处置连接。
using(var _sqlConnection = new SqlConnection())
{
//code here
_sqlConnection.Open();
}
//Safely disposed.
此外,在c#代码中显式地使用析构函数永远都不是一个好主意,除非你有非托管代码。
当一个代码试图访问已经被垃圾收集的SQLConnection时,您可能会收到此错误。这通常会发生在像这样的情况
SqlConnection sqlConn;
using (var sqlConnection = new SqlConnection())
{
sqlConn = sqlConnection;
sqlConnection.Open();
}
sqlConn.Close();
我知道这个例子看起来很傻,因为它过于简化了,但是当程序员倾向于在管理类之间共享连接对象时,这种情况经常发生。查找代码中最近的任何更改。也许您正在传递多个对象之间连接的实例。其中一个对象被垃圾收集,然后连接也被处理。