永发信息网

用c#连接数据库的时候 读数据是dataReader.HasRows 和dataReader.Read()这两个有什么明显的区别那

答案:4  悬赏:80  手机版
解决时间 2021-11-25 11:43
用c#连接数据库的时候 读数据是dataReader.HasRows 和dataReader.Read()这两个有什么明显的区别那
最佳答案
datareader.HasRows 只是检则库中是否有记录,如果有则返回true,还得再用read()读取.
datareader.read()为从数据开头往后读,如果库中已读到结尾了(可能没有记录)则返回false,如果用在if中,则会自动读出一条,else里则不必再用read(),如果有while(含有read()条件),则自动从第二条开始往下读
结论:单条可用read()检测,多条用到while时用HasRows检测...

声明:SqlDataReader 提供一种从 SQL Server 数据库读取行的只进流的方式。无法继承此类。

我在编写一个小程序时遇到一个小问题:

使用SqlDataReader实例reader的HasRows判断数据流中是否存在数据,进而执行数据的输出操作,其中用到代码如下

SqlDataReader reader = Command.ExecuteReader();
while(reader.HasRows)

{
reader.Read();

qx_Str = reader[0].ToString(); //出错位置

}
reader.Close();
sqlcon.Close();

运行后在红色位置报错:在没有任何数据时进行无效的读取尝试

出现这种情况很明显是读取器运行到的位置无数据流,无法执行数据的输出

这时确定判断是while处的判断条件有误,在MSDN文档中查询到:

HasRows属性

// HasRows 获取一个值,该值指示 System.Data.SqlClient.SqlDataReader 是否包含一行或多行。

原来是出在HasRows的使用上,只要SqlDataReader存在数据流(数据流不为空)则返回的bool值为真,这样的话,这个循环总执行(难怪使用try ..catch 假死)。数据为空时,read[0]读取数据时,则会出现错误!

那么如何避免出现该错误呢,仍然是用HasRows属性?

可以想到只需利用if语句取消循环状态!!

那么要用while怎么办呢?使用SqlDataReader实例的Read()方法,对!

让我们认识一下Read()方法:

// 摘要: 使 System.Data.SqlClient.SqlDataReader 前进到下一条记录。
// 返回结果: 如果存在多个行,则为 true;否则为 false。

则只需将reader.Read()替换reader.HasRows执行循环,为什么行呢?

SqlDataReader的默认位置在[第一条记录前面]。因此,必须调用 Read 来开始访问任何数据。

Read()为前进到下一条记录。当循环执行到Read()无数据时,则循环结束!!不过还要将循环里的Read()去掉,则每循环一次前进了两行数据。
全部回答
HasRows是SqlDataReader的一个属性,其作用是获取一个值,该值指示 SqlDataReader是否包含一行或多行,如果 SqlDataReader 包含一行或多行,则为 true;否则为 false。
HasRows判断是否有Row,而Read则从当前行读一行,返回是否成功,Reader的当前行向下移一行
很明显,从字面意思理解就可以了
HasRows表示的是从数据库读出来的数据集dataReader中是否存在数据,它的作用是用来判断数据集是否为空,执行的结果为 true/false
Read才是真正的读数据,采用的是一条一条不可回的顺序读法,每执行一次Read,dataReader的当前数据往后移了,所以要通过循环来读取比如:
while(dataReader.Read() != null)
{
.... ....
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
搏美专业照明地址在哪,我要去那里办事,
家里贴的符可以随便撕掉吗
跨专业考MPAcc能上吗?
生土地如何变成熟土地种菜
七月二十三的历史故事
3x+(25-x)=120解方程
求塑钢型材60系列出材率的计算公式,谢谢
南阳到白沟高速过路费多少
喷码机│激光喷码机│在线喷码机│自动喷码机
耳朵先生狗罐头怎么样
如图《猛龙特囧》电影里的,和杨建平对打的叫
完美主义专业烫染理发店地址有知道的么?有点
安盛传媒汽车推广交390元可靠吗
江西财经大学财税与公共管理学院的行政管理专
b2倒车入库怎么看点子
推荐资讯
求一幅横批为“年年有余“的对联,谁能想出来
关于键级的问题
oppo r7 plus后摄像头右边的黑色东西是什么?
中国电信(圣之广场营业厅)地址在哪,我要去那
青海西宁生产的好酒有哪些?叫什么名字!
膨胀机入口温度在多少度是最佳点?
十八题怎么做
排水量怎么才能算出是9×10的四次方t
卧槽我纯洁的安娜到底怎么了
mac下android怎么看log
渺然一水是什么意思
女生的例假是不是每个月固定的那几号,还是该
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?