【发布时间】:2013-09-30 08:08:32
【问题描述】:
我正在编写一个 ASP.NET 应用程序。在我的数据层中,在查询之前和之后打开和关闭了一个 sql 连接。 SqlConnection 被保存为单个类的私有字段。类中的每个数据库调用都使用相同的结构:
conn.Open();
try
{
// database querying here
}
finally
{
conn.Close();
}
然而,在极少数情况下,我会收到异常“连接未关闭。连接的当前状态为“打开”。无法重现该问题,因为它很少源自代码的不同部分。我的应用程序中涉及到一些线程,但新线程也创建了新的数据层类,从而产生了新的连接对象。
我不明白如何使用上面的代码让连接在打开状态下徘徊。连接打开后不应该一直关闭,就不可能出现上面的异常吗?
【问题讨论】:
-
这里重要的是你的 conn 对象在哪里被实例化?
-
另外:使用 'using' 有什么问题?
-
只使用 using 语句?保证连接被关闭和处理。
-
如果可能,请尝试将您的连接包装在
using(SQLConnection conn = new SQLConnection(xxx)) { ... }语句中,看看您是否仍然可以重现错误。这样,当代码退出时,GC 会清理 SQL 连接 -
在哪里你得到这个异常?在贴出的代码中?如果没有,您可以发布更多代码吗?