关于SqlDataReader使用的一点疑惑

Posted 寂寞姜大虎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SqlDataReader使用的一点疑惑相关的知识,希望对你有一定的参考价值。

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

用法如下图:

 

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

思考:

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

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

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

试一试:

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

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

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

 

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

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

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

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

 

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

 

以上是关于关于SqlDataReader使用的一点疑惑的主要内容,如果未能解决你的问题,请参考以下文章

C++中map的一点疑惑...

在学习“contains()和compareDocumentPositon()"过程中遇到的一点疑惑!

在学习"$(this)和this"过程中遇到的一点疑惑!

如何使用 SqlDataReader 像使用 SqlDataAdapter 一样快地填充 DataTable?

MySQL的一点浅显知识

SQL Server中的索引结构与疑惑