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++;
- }
- if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }
因此导致有一条记录已被读取,而再次用Read方法时,已经从第2条记录开始读取了。- -!
我们加以改造,判断是否有数据,还有另一种方法,就是HasRows。
- if (SqlDataReader.HasRows == false) { MessageBox.Show("没有实验数据!"); }
总结:(1)用HasRows代替Read方法,防止再次利用Read方法时从第2条记录开始读取。
二。hasrows的办法仅适用于判断是否有数据,至于读取还是需要read()方法。
- if (SqlDataReader.HasRows)
- {
- dr.read();//还是要read方法的
- combobox1.items.add(dr[0].tostring());
- }
- 不如直接简化为
-
- while (dr.read())
- {
- combobox1.items.add(dr[0].tostring());
- }