我的.Net SqlConnection对象是否自行关闭

时间:2011-05-25 08:32:41

标签: .net sqlconnection

我们有一个简单的循环过程,可以在某些数据行上执行某些操作。

提交更改时,新行和SqlConnection对象将传递给处理行更改或添加的方法。

该过程在10次中运行5次,一切正常。 SqlConnection在循环开始时打开,在循环后关闭,但有时它确实在循环期间关闭。代码在循环期间的任何时候都没有调用close()。

所以我的问题就是为什么它可以自己关闭。

干杯

作为参考,代码类似于以下

connection.Open();

foreach(DataRow row in rows)
{
  if(rubbish)
{
   //make some changes and save
   DatabaseConnector.Save(sqlStringToExecute, connection);
}
}

connection.Close();

1 个答案:

答案 0 :(得分:1)

连接不会自行关闭,不会。连接关闭的主要时间是:

  • 处置(例如通过using声明)
  • 显式调用Close()
  • 使用CommandBehaviour.CloseConnection行为
  • 执行命令
  • 垃圾收集 - 有点(虽然这有点不同,真的)
  • 服务器不再可用

如果您实际上遇到异常(可能是超时或死锁),在using块中弹跳(处理它),并且可能吞下异常,则第一种情况非常有可能。

第三种是善意的代码。

要进行调查,您可以订阅StateChange事件并在处理程序中添加断点;然后向后走过堆栈跟踪,你就会知道正是谁正在关闭它,以及为什么。如果您使用超出此代码范围的连接,请记得取消订阅。