码迷,mamicode.com
首页 > 数据库 > 详细

关于SqlDataReader使用的一点疑惑

时间:2018-08-19 17:32:27      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:这一   特性   技术   png   连接   方法   取数   字段   读取数据   

C#中的SqlDataReader类(System.Data.SqlClient)是用来在保持打开数据库连接的状态下取数据用的

用法如下图:

技术分享图片

 

“保持与数据库的连接”这个特性也是SqlDataReader与SqlDataAdapter的最大区别,

思考:

既然SqlDataReader在读取数据的时候是保持对数据库的连接,

那么,如果在ExecuteReader();方法执行之后,在reader.Read()进行逐行取值的过程中,

我们改变数据库某一行的值,那么此时这个reader走到这一行时,显示的应该是改变之前的值,还是改变之后的值呢?

试一试:

首先数据库有两条数据,F_XMJSName字段内容分别为“张三” “李四”

技术分享图片

执行代码,并读取reader返回的第一行的字段值,是“张三”没错。

技术分享图片

此时我们修改数据库第二行的值,把“李四”改成“王五”

 技术分享图片

此时继续执行代码,进行第二行数据的字段抓取,取得的数据依然是“李四”,而非我希望的“王五”

技术分享图片

 猜想:  当Command执行过ExecuteReader()方法之后,返回回来的reader对象,应该是引用了数据库的一个快照,

所以无论在这之后如何改变数据库里面的数据,reader遍历读取的数据应该是不会跟着变化的。

为了验证猜想,扒了扒微软的源码,但是没找到太根本的解释,也有可能是技术太菜,没看懂。。

 

如果有大神知道其中的原理,欢迎留言

 

关于SqlDataReader使用的一点疑惑

标签:这一   特性   技术   png   连接   方法   取数   字段   读取数据   

原文地址:https://www.cnblogs.com/qfl-blog/p/9501820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!