Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果SqlConnection.ExecuteReader返回null,是否需要关闭连接?_C#_Sql_.net_Sql Server - Fatal编程技术网

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

C# 如果SqlConnection.ExecuteReader返回null,是否需要关闭连接?,c#,sql,.net,sql-server,C#,Sql,.net,Sql Server,相当直截了当的问题: 如果我使用SqlConnection.ExecuteReader执行存储过程并返回一些行,如果它返回null我必须关闭连接吗 另外,如果答案是“不,我不必关闭连接”,如果我这样做会发生什么?如果您在服务器上完成了工作,是的,如果您想提交除“否”之外的其他请求,这与SqlDataReader返回的内容无关,有时是为了优化服务器上的工作,您可以创建一个不断连接到sql server的类,并且只向其提交任务 请求启动时,打开连接 .. 在sql server上执行任务 … 在连接

相当直截了当的问题:

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


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

如果您在服务器上完成了工作,是的,如果您想提交除“否”之外的其他请求,这与SqlDataReader返回的内容无关,有时是为了优化服务器上的工作,您可以创建一个不断连接到sql server的类,并且只向其提交任务

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

在连接端关闭连接

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


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

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

编辑(其他信息基于对另一个答案的评论讨论):
可能成为孤儿的“资源”包括:

  • 记忆
  • 文件句柄
  • 与数据库的连接(例如SQL Server)

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

以前已创建了SqlConnection,并且SqlDataReader不管理连接生存期(在将连接用于其他用途之前,代码必须先处理SqlDataReader,但这并不是为了更改连接状态)。顺便问一下:SqlDataReader如何“返回null”?是的,我有点困惑,我重新编写了问题。请解释持续连接到服务器是什么意思,因为在服务器环境中,始终连接是一个很大的禁忌。如果您需要在一个请求中对sql server执行多个操作,只需在启动时打开一个连接,并保持打开状态,然后在请求时关闭它现在情况更清楚了,我可以同意你的看法。关键是一个请求可以执行多个操作。我建议在你的回答中补充一点,我正在使用的现有架构为每个请求打开了一个新的连接。因此我必须处理。我修改了这个问题,使之更准确。