我正在编写一个ASP.NET应用程序。在我的数据层中,在查询之前和之后正在打开和关闭sql连接。 SqlConnection被保存为单个类的私有字段。类中的每个数据库调用都使用相同的结构:
conn.Open();
try
{
// database querying here
}
finally
{
conn.Close();
}
然而,在极少数情况下,我得到例外'连接未关闭。连接的当前状态是打开的。由于它很少来自代码的不同部分,因此无法重现该问题。我的应用程序中涉及一些线程,但新线程也会创建新的数据层类,从而创建新的连接对象。
我不明白如何使用上面的代码在打开时保持连接。打开后是否应始终关闭连接,以免发生上述异常?
答案 0 :(得分:15)
可能是您未处理的try
块中抛出异常。请参阅MSDN中的try-finally:
在处理的异常中,保证运行关联的finally块。但是,如果未处理异常,则finally块的执行取决于如何触发异常展开操作。
我建议将连接包装在using
块中:
using (SqlConnection connection = new SqlConnection(connectionString))
{
//etc...
}
或者,在try-finally
:
conn.Open();
try
{
}
catch
{
}
finally
{
conn.Close();
}
答案 1 :(得分:2)
您应该在操作完成后立即关闭连接。尝试尽可能短的时间打开连接。 但是最好使用使用,即使出现异常,它也会调用Dispose方法。
using (SqlConnection conn= new SqlConnection(conStr))
{
//etc...
}
或
1)打开连接
2)访问数据库
3)关闭连接
//conn.Open();
try
{
conn.Open();
//Your Code
}
finally
{
conn.Close();
conn.Dispose();//Do not call this if you want to reuse the connection
}