当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能在SqlDataReader关闭之前使用SqlConnection实例?

如何解决《为什么我不能在SqlDataReader关闭之前使用SqlConnection实例?》经验,为你挑选了1个好方法。

来自MSDN:

在使用SqlDataReader时,关联的SqlConnection正忙于为SqlDataReader提供服务,除了关闭SqlConnection之外,不能对SqlConnection执行任何其他操作.在调用SqlDataReader的Close方法之前就是这种情况.例如,在调用Close之前,无法检索输出参数.

a)为什么不能将SqlConnection用于其他任何事情?毕竟,当ExecuteQuery()返回SqlDataReader对象时,来自DB的数据已经被检索并填充了SqlDatareader对象.因此,我不知道SqlConnection应该如何或为什么仍然应该为SqlDataReader对象提供服务?!

b)更重要的是,在调用Close()SqlDataReader 之前检查输出参数的原因是什么?

c)当上面的引用提到没有其他操作可以在SqlConnection上执行时,它有什么操作?只是那些需要连接到远程sql server的人,或者我们不能使用SqlConnection实例的任何成员?

谢谢.



1> Greg Beech..:

a)ExecuteReader返回时,数据尚未全部检索并填充在阅读器中,它仍然可以从数据库中回送.这就是问题的重点,SqlDataReader因为这样做比预先加载它更有效.

b)由于表格数据流(TDS)协议的结构方式,在阅读器完成之前,您无法检索输出参数.直到结果集数据之后,输出参数才在物理上向下发送.

c)这意味着除了Close记录为保证工作之外的任何操作都没有.它们实际上是否正常工作是无关紧要的,因为这是一个实现细节而不是合同,而针对实现细节的编程是灾难的一个方法.

为什么要重新使用连接?使用的连接SqlConnection在后台汇集,所以当你处理它时它并没有真正摆脱所有资源,它只是返回到池的连接.这意味着您可以在最短的时间内使用连接,理想情况是在一个using块内,而不必担心这种类型的事情.只需在需要时创建一个新连接,并且不要因为它已经在幕后发生而试图重新使用它们.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有