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

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

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

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

[csharp]   view plain copy

  1. if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }  
  2.         while(SqlDataReader.Read())  
  3.        {  
  4.           if (i==0)  
  5.            {  
  6.             txtBoxNo1.Text=sda["No"].ToString();//第一条记录的No列存入txtBoxNo1  
  7.              data1 = sda["Data"].ToString();//第一条记录的Data列存入data1这个字符串中                         
  8.                           
  9.            }  
  10.           if(i==1)  
  11.            {  
  12.                           
  13.             txtBoxNo2.Text = sda["No"].ToString();//第二条记录的No列存入txtBoxNo2  
  14.             data2 = sda["Data"].ToString();//第二条记录的Data列存入data2这个字符串中  
  15.   
  16.             }  
  17.            i++;             
  18.          }  
这里用while(SqlDataReader.Read())循环依次读取记录,并将结果存至txtBox和字符串中,但运行结果只有第一个txtBoxNo1和第一个字符串data1被赋值,少了一条记录。原因就是在前面有一个判断是否有符合条件数据的语句:

[csharp]   view plain copy
  1. if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }  

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

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

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

       总结:(1)用HasRows代替Read方法,防止再次利用Read方法时从第2条记录开始读取。


二。hasrows的办法仅适用于判断是否有数据,至于读取还是需要read()方法。

  1. if (SqlDataReader.HasRows
  2. {
  3. dr.read();//还是要read方法的
  4. combobox1.items.add(dr[0].tostring());
  5. }
  6. 不如直接简化为
    1. while (dr.read()
    2. {
    3. combobox1.items.add(dr[0].tostring());
    4. }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值