当SqlDataReader.Read()少一条记录时
2013-01-01 15:02
375 查看
SqlDataReader是c#里面针对读取SQLserver数据的一种很好用、效率很高的方式。SqlDataReader.Read()将数据库中的数据,保存至一个结果集中result中。
利用read()方法,可以遍历当前结果集(每一条)记录;利用NextResult读取下一个结果集。
当用while(SqlDataReader.Read())处理结果集的数据时,有时会发生少一条记录的情况,我们需要检查一下以往是否已经用过SqlDataReader.Read()这个方法了,因为read方法类似next指针,读完一条记录自动转移到下一条记录。看一段代码:SqlDataReader读取数据库符合要求的2条记录。
[csharp] view
plaincopy
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被赋值,少了一条记录。原因就是在前面有一个判断是否有符合条件数据的语句:
[csharp] view
plaincopy
if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }
因此导致有一条记录已被读取,而再次用Read方法时,已经从第2条记录开始读取了。- -!
我们加以改造,判断是否有数据,还有另一种方法,就是HasRows。
[csharp] view
plaincopy
if (SqlDataReader.HasRows == false) { MessageBox.Show("没有实验数据!"); }
好了,运行开始,运行结果显示有2条记录,2个文本框和字符串被依次赋值,没问题了。
总结:(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());
}
利用read()方法,可以遍历当前结果集(每一条)记录;利用NextResult读取下一个结果集。
当用while(SqlDataReader.Read())处理结果集的数据时,有时会发生少一条记录的情况,我们需要检查一下以往是否已经用过SqlDataReader.Read()这个方法了,因为read方法类似next指针,读完一条记录自动转移到下一条记录。看一段代码:SqlDataReader读取数据库符合要求的2条记录。
[csharp] view
plaincopy
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被赋值,少了一条记录。原因就是在前面有一个判断是否有符合条件数据的语句:
[csharp] view
plaincopy
if (SqlDataReader.Read() == false) { MessageBox.Show("没有实验数据!"); }
因此导致有一条记录已被读取,而再次用Read方法时,已经从第2条记录开始读取了。- -!
我们加以改造,判断是否有数据,还有另一种方法,就是HasRows。
[csharp] view
plaincopy
if (SqlDataReader.HasRows == false) { MessageBox.Show("没有实验数据!"); }
好了,运行开始,运行结果显示有2条记录,2个文本框和字符串被依次赋值,没问题了。
总结:(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());
}
相关文章推荐
- 当SqlDataReader.Read()少一条记录时
- *SelectOne SqlDataReader 通过SqlDataReader实现一条记录的读取*
- using语句下使用SqlDataReader异常:Invalid attempt to Read when reader is closed
- SqlDataReader 读取记录时遇到的问题
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- SqlDataReader读取不出第一条记录的问题
- SqlDataReader 关闭问题:阅读器关闭时尝试调用 Read 无效
- SqlDataReader 中的read 方法是什么意思?
- SqlDataReader实例 HasRows属性与 Read()方法
- 在循环中读取sqlDataReader.Read()中的所有列,数据类型如何转换?
- SqlDataReader的Read方法
- 如何判断一个sqldatareader是否有记录,或者记录数有多少条
- 第十五章 SqlDataReader reader = comm.ExecuteReader(); while (reader.Read())
- 获取sqlDataReader对象Read()方法读取流的字段值的四种方法
- 将 SqlDataReader 转为Model, 如果 SqlDataReader.read() 有值 ,返回对象,否则返回Null
- 用SqlDataReader读数据后判断[字段或记录]是否为空
- SqlDataAdapter和SqlDataReader区别