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

本文关键字:连接 是否 ExecuteReader SqlConnection 返回 null 如果 | 更新日期: 2023-09-27 17:56:34

相当简单的问题:

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

另外,如果答案是"不,我不必关闭连接",如果我这样做会发生什么?

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

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

请求启动时,打开连接
....
在 SQL 服务器上
执行任务...
在连接端关闭连接

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

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

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

编辑(基于对另一个答案的评论讨论的附加信息):
可能成为孤立的有问题的"资源"是:

  • 记忆
  • 文件句柄
  • 与数据库(例如.SQL服务器)的连接

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