我已从Connection类中的类方法返回连接。在我的另一个类中,我实例化连接类以打开连接。我也关闭了连接,但似乎有连接泄漏。知道如何解决它。我的代码如下
public class Connection
{
private SqlConnection _oConn;
public SqlConnection GetConnection
{
get
{
if (_oConn == null)
{
string sConnString = ConfigurationManager.ConnectionStrings["bplocator_database_connection"].ConnectionString;
_oConn = new SqlConnection(sConnString);
}
return _oConn;
}
}
}
在另一个类文件中,我调用此连接类
private BPAdmin.data.Connection oConn
{
get
{
if (_oConn == null)
{
_oConn = new BPAdmin.data.Connection();
}
return _oConn;
}
}
public void getData
{
try
{
oConn.GetConnection.Open();
//Do something
}
catch
{
oConn.GetConnection.Close();
}
finally
{
oConn.GetConnection.Close();
}
}
我发现这导致连接泄漏并导致应用程序池达到最大值。任何想法是错的,我如何解决它。请帮忙!
答案 0 :(得分:3)
您有两个选择
using
声明finally
而不是Close
致电Dispose
两种解决方案都应该解决问题。
更新:如何使用声明
由于oConn
始终在getData
中返回新对象,因此您可以使用以下内容:
public void getData()
{
try
{
using(var conection=oConn.GetConnection)
{
//execute your query
}
}
catch
{
//do something to show user an error or just log it
}
finally
{
//you do not have to close connection because using statement will do this for you
}
}
答案 1 :(得分:0)
SqlConnection
是一个一次性课程,你应该在完成后处理它。
简而言之,让你的班级自己实施IDisposable
(按照那里的例子。这是非常好的教科书)。
答案 2 :(得分:0)
catch
{
oConn.GetConnection.Close();
}
finally
{
oConn.GetConnection.Close();
}
看一下这部分,最后会发生在try catch块中发生的事情,所以删除
catch
{
oConn.GetConnection.Close();
}
来自您的代码