C#中的SqlDataReader类(System.Data.SqlClient)是用来在保持打开数据库连接的状态下取数据用的
用法如下图:
“保持与数据库的连接”这个特性也是SqlDataReader与SqlDataAdapter的最大区别,
思考:
既然SqlDataReader在读取数据的时候是保持对数据库的连接,
那么,如果在ExecuteReader();方法执行之后,在reader.Read()进行逐行取值的过程中,
我们改变数据库某一行的值,那么此时这个reader走到这一行时,显示的应该是改变之前的值,还是改变之后的值呢?
试一试:
首先数据库有两条数据,F_XMJSName字段内容分别为“张三” “李四”
执行代码,并读取reader返回的第一行的字段值,是“张三”没错。
此时我们修改数据库第二行的值,把“李四”改成“王五”
此时继续执行代码,进行第二行数据的字段抓取,取得的数据依然是“李四”,而非我希望的“王五”
猜想: 当Command执行过ExecuteReader()方法之后,返回回来的reader对象,应该是引用了数据库的一个快照,
所以无论在这之后如何改变数据库里面的数据,reader遍历读取的数据应该是不会跟着变化的。
为了验证猜想,扒了扒微软的源码,但是没找到太根本的解释,也有可能是技术太菜,没看懂。。
如果有大神知道其中的原理,欢迎留言
原文地址:https://www.cnblogs.com/qfl-blog/p/9501820.html
时间: 2024-11-13 09:59:45