我正在编写一个ASP.NET应用程序。在我的数据层中,在查询之前和之后都会打开和关闭一个sql连接。SqlConnection被保留为单个类的私有字段。类中的每个数据库调用都使用相同的结构:
conn.Open();
try
{
// database querying here
}
finally
{
conn.Close();
}
但是,在极少数情况下,我会遇到例外情况:“连接未关闭。连接的当前状态为“打开”。重现该问题是不可能的,因为它很少来自代码的不同部分。我的应用程序涉及一些线程,但是新线程也创建了新的数据层类,因此也创建了新的连接对象。
我不明白如何使用上面的代码在开放中徘徊。打开连接后不应该总是关闭连接,从而使上述异常不可能发生吗?
很可能在try
您未处理的块中引发了异常。请最终尝试在MSDN中查看此说明:
在已处理的异常内,可以保证关联的finally块可以运行。但是,如果未处理异常,则finally块的执行取决于如何触发异常展开操作。
using
无论如何,我建议将连接包装在一个块中:
using (SqlConnection connection = new SqlConnection(connectionString))
{
//etc...
}
或者,将捕获块添加到try-finally
:
conn.Open();
try
{
}
catch
{
}
finally
{
conn.Close();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句