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执行多个操作,只需在启动时打开一个连接,并保持打开状态,然后在请求时关闭它现在情况更清楚了,我可以同意你的看法。关键是一个请求可以执行多个操作。我建议在你的回答中补充一点,我正在使用的现有架构为每个请求打开了一个新的连接。因此我必须处理。我修改了这个问题,使之更准确。