2011-05-25 71 views
0

我们有一个简单的循环过程,它在某些数据行上执行某些操作。我的.Net SqlConnection对象是否自己关闭

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

该过程运行5次,满分10分均可。 SqlConnection在循环开始时打开,在循环结束后关闭,但有时它在循环中确实关闭。代码在循环过程中的任何时刻都不会调用close()。

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

干杯

的代码类似于以下

connection.Open(); 

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

connection.Close(); 
+3

你能显示你的代码吗?它会让你的问题更清楚。 – 2011-05-25 08:35:05

+0

也许你应该为每个操作使用几个连接? – Cynede 2011-05-25 08:36:35

+0

永远不要做类似上面的代码,如果发生任何事情并抛出异常,您的连接将不会关闭,您声明的地方使用Using语句,因此在任何情况下连接都将被关闭并在超出范围时处理。 – 2011-05-25 08:47:16

回答

1

的连接不会关闭自身,没有一个参考。主要倍的连接将关闭将是:(通过using声明例如)

  • 处置
  • 命令与CommandBehaviour.CloseConnection行为
  • 垃圾收集执行Close()
  • 显式调用 - 种-of(虽然实际上有点不同)
  • 服务器不再可用

如果您确实发生异常(可能是超时或死锁),弹出using块(处置它),并且可能吞咽该异常,则第一种非常有可能。

第三个很好的代码很可能。

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

+0

真的和上面的例子一样简单。连接传递给执行sql并退出的方法。有时在循环过程中它是一个关闭的连接,再次运行应用程序并且它工作正常。堆栈跟踪等,并在调用堆栈后显示任何你不能看到上面。确实很奇怪。 – Robert 2011-05-25 08:43:16

+0

@Robert - 然后hook StateChange来找出为什么 – 2011-05-25 08:44:01

+0

你意味着钩入连接的statechanged事件? – Robert 2011-05-25 08:44:54

相关问题