相当直截了当的问题:
如果我使用SqlConnection.ExecuteReader
执行存储过程并返回一些行,如果它返回null
,我是否必须关闭连接?
另外,如果答案是“不,我不必关闭连接”,如果我这样做会怎么样?
答案 0 :(得分:2)
如果你在服务器上完成了工作,是的,如果你想提交另一个请求而不是,这与SqlDataReader返回的内容无关,有时为了优化服务器上的工作,你可能会创建一个经常连接到服务器的类。 sql server,你只需要向它提交任务。
请求启动,打开连接
....
在sql server上执行任务
...
在连接端关闭连接
执行此操作的最佳位置是global.asax文件
关于关闭连接会发生什么情况,SqlDataReader在打开的连接上工作,如果关闭连接并再次执行读取器,则会出现异常
答案 1 :(得分:1)
任何打开的资源都需要关闭(当您完全使用它时)。您应该使用try-catch-finally构造并将清理代码放在finally中以防万一发生异常。否则,对资源的引用将变为孤立,垃圾收集将无法摆脱它(好吧,直到App Domain被回收)。您还应该查看SqlConnection.Open MSDN页面上的C#示例中显示的using
语句。
编辑(根据对其他答案的评论讨论的其他信息):
可能成为孤儿的“资源”是:
当对这些资源的引用是孤立的时,它们将继续被.Net使用并导致吞噬内存,或者在注释中注明的特定情况下,使用与SQL Server的所有可用连接。