来自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实例的任何成员?
谢谢.
a)ExecuteReader
返回时,数据尚未全部检索并填充在阅读器中,它仍然可以从数据库中回送.这就是问题的重点,SqlDataReader
因为这样做比预先加载它更有效.
b)由于表格数据流(TDS)协议的结构方式,在阅读器完成之前,您无法检索输出参数.直到结果集数据之后,输出参数才在物理上向下发送.
c)这意味着除了Close
记录为保证工作之外的任何操作都没有.它们实际上是否正常工作是无关紧要的,因为这是一个实现细节而不是合同,而针对实现细节的编程是灾难的一个方法.
为什么要重新使用连接?使用的连接SqlConnection
在后台汇集,所以当你处理它时它并没有真正摆脱所有资源,它只是返回到池的连接.这意味着您可以在最短的时间内使用连接,理想情况是在一个using
块内,而不必担心这种类型的事情.只需在需要时创建一个新连接,并且不要因为它已经在幕后发生而试图重新使用它们.