加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

当SqlDataReader.Read()少一条记录时

发布时间:2020-12-12 14:37:52 所属栏目:MsSql教程 来源:网络整理
导读:SqlDataReader是c#里面针对读取SQLserver数据的一种很好用、效率很高的方式。SqlDataReader.Read()将数据库中的数据,保存至一个结果集中result中。 利用read()方法,可以遍历当前结果集(每一条)记录;利用NextResult读取下一个结果集。 当用while(SqlData

SqlDataReader是c#里面针对读取SQLserver数据的一种很好用、效率很高的方式。SqlDataReader.Read()将数据库中的数据,保存至一个结果集中result中。

利用read()方法,可以遍历当前结果集(每一条)记录;利用NextResult读取下一个结果集。

当用while(SqlDataReader.Read())处理结果集的数据时,有时会发生少一条记录的情况,我们需要检查一下以往是否已经用过SqlDataReader.Read()这个方法了,因为read方法类似next指针,读完一条记录自动转移到下一条记录。看一段代码:SqlDataReader读取数据库符合要求的2条记录。

	if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }
? ? ? ? while(SqlDataReader.Read())
? ? ? ?{
? ? ? ? ? if (i==0)
? ? ? ? ?  {
? ? ? ? ? ? txtBoxNo1.Text=sda["No"].ToString();//第一条记录的No列存入txtBoxNo1
? ? ? ? ? ?  data1 = sda["Data"].ToString();//第一条记录的Data列存入data1这个字符串中 ? ? ? ? ? ? ? ? ? ? ? 
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ?  }
? ? ? ? ? if(i==1)
? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? 
? ? ? ? ? ? txtBoxNo2.Text = sda["No"].ToString();//第二条记录的No列存入txtBoxNo2
? ? ? ? ? ? data2 = sda["Data"].ToString();//第二条记录的Data列存入data2这个字符串中

? ? ? ? ? ? }
? ? ? ? ?  i++; ? ? ? ? ??
? ? ? ? ?}
这里用while(SqlDataReader.Read())循环依次读取记录,并将结果存至txtBox和字符串中,但运行结果只有第一个txtBoxNo1和第一个字符串data1被赋值,少了一条记录。原因就是在前面有一个判断是否有符合条件数据的语句:

if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }

因此导致有一条记录已被读取,而再次用Read方法时,已经从第2条记录开始读取了。- -!

我们加以改造,判断是否有数据,还有另一种方法,就是HasRows。

if (SqlDataReader.HasRows == false) { MessageBox.Show("没有实验数据!"); }
好了,运行开始,运行结果显示有2条记录,2个文本框和字符串被依次赋值,没问题了。

? ? ? ?总结:(1)用HasRows代替Read方法,防止再次利用Read方法时从第2条记录开始读取。(2)程序员起初的想法很美好,但问题总会有,So,没有问题或经过调试后没有问题是程序员最美好的想法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读