如果SqlConnection.ExecuteReader返回null,是否需要关闭连接?

时间:2014-04-04 16:32:35

标签: c# sql .net sql-server

相当直截了当的问题:

如果我使用SqlConnection.ExecuteReader执行存储过程并返回一些行,如果它返回null,我是否必须关闭连接?

另外,如果答案是“不,我不必关闭连接”,如果我这样做会怎么样?

2 个答案:

答案 0 :(得分:2)

如果你在服务器上完成了工作,是的,如果你想提交另一个请求而不是,这与SqlDataReader返回的内容无关,有时为了优化服务器上​​的工作,你可能会创建一个经常连接到服务器的类。 sql server,你只需要向它提交任务。

请求启动,打开连接
....
在sql server上执行任务
...
在连接端关闭连接

执行此操作的最佳位置是global.asax文件

关于关闭连接会发生什么情况,SqlDataReader在打开的连接上工作,如果关闭连接并再次执行读取器,则会出现异常

答案 1 :(得分:1)

任何打开的资源都需要关闭(当您完全使用它时)。您应该使用try-catch-finally构造并将清理代码放在finally中以防万一发生异常。否则,对资源的引用将变为孤立,垃圾收集将无法摆脱它(好吧,直到App Domain被回收)。您还应该查看SqlConnection.Open MSDN页面上的C#示例中显示的using语句。

编辑(根据对其他答案的评论讨论的其他信息):
可能成为孤儿的“资源”是:

  • 存储器
  • 文件句柄
  • 与数据库的连接(例如SQL Server)

当对这些资源的引用是孤立的时,它们将继续被.Net使用并导致吞噬内存,或者在注释中注明的特定情况下,使用与SQL Server的所有可用连接。