繁体   English   中英

my.Net SqlConnection object 是否自行关闭

[英]Does my .Net SqlConnection object close on its own

我们有一个简单的循环过程,可以在一些数据行上做一些事情。

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

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

所以我的问题是为什么它可能会自行关闭。

干杯

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

connection.Open();

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

connection.Close();

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

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

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

第三种在善意的代码中是非常可能的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM