[原]C#:读取数据DataReader
2015-12-25 21:28
375 查看
DataReader对象是数据读取器对象,提供只读向前的游标。如果应用程序需要每次从数据库中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取。对于不同的数据库连接,有不同的DataReader类型。
►在System.Data.SqlClient命名空间下时,可以调用SqlDataReader类。
►在System.Data.OleDb命名空间下时,可以调用OleDbDataReader类。
►在System.Data.Odbc命名空间下时,可以调用OdbcDataReader类。
►在System.Data.OracleClient命名空间下时,可以调用OracleDataReader类。
在使用DataReader对象读取数据时,可以使用ExecuteReader方法,根据SQL语句的结果创建一个SqlDataReader对象。
[注]:在创建DataRelation时,它首先验证是否可以建立关系。在创建DataRelation和将其添加到DataRelationCollection(DataSet的DataRelation对象的集合)之间的这段时间,可以对父行或子行进行其他更改。
示例,使用ExecuteReader方法创建一个读取tb_command表中所有数据的SqlDataReader对象,代码如下:
//实例化SqlConnection变量conn
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
conn.Open(); //打开连接
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand();
//设置Connection属性,指定其使用conn连接数据库
cmd.Connection = conn;
//设置CommandText属性,以及其执行的SQL语句
cmd.CommandText = "select* from tb_command";
//设置CommandType属性为Text,使其只执行SQL语句文本形式
cmd.CommandType = CommandType.Text;
//使用ExecuteReader方法实例化一个SqlDataReader对象
SqlDataReader sdr = cmd.ExecuteReader();
1、判断查询结果中是否有值
可以通过SqlDataReader对象的HasRows属性获取一个值,该值指示SqlDataReader是否包含一行或多行,即判断查询结果中是否有值。语法如下:
public override bool HasRows{get;}
其中,如果SqlDataReader包含一行或多行,该值为true,否则为false。示例代码如下:
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
conn.Open();
SqlCommand cmd = new SqlCommand("select* from "+textBox1.Text.Trim(), conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows){
MessageBox.Show("数据表中有值");
}
else{
MessageBox.Show("数据表中没有任何数据");
}
2、读取数据
可以通过ExecuteReader方法,根据SQL语句创建一个SqlDataReader对象后,再调用SqlDataReader对象的Read方法读取数据。Read方法使用SqlDataReader前进到下一条记录,SqlDataReader的默认位置在第一条记录前面。因此,必须调用Read方法访问数据。对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。
[注]:在使用SqlDataReader对象之前,必须打开数据库连接。如果针对一个SqlConnection,创建多个SqlDataReader对象,则创建下一个SqlDataReader对象之前,要通过Close方法关闭上一个SqlDataReader对象。
►在System.Data.SqlClient命名空间下时,可以调用SqlDataReader类。
►在System.Data.OleDb命名空间下时,可以调用OleDbDataReader类。
►在System.Data.Odbc命名空间下时,可以调用OdbcDataReader类。
►在System.Data.OracleClient命名空间下时,可以调用OracleDataReader类。
在使用DataReader对象读取数据时,可以使用ExecuteReader方法,根据SQL语句的结果创建一个SqlDataReader对象。
[注]:在创建DataRelation时,它首先验证是否可以建立关系。在创建DataRelation和将其添加到DataRelationCollection(DataSet的DataRelation对象的集合)之间的这段时间,可以对父行或子行进行其他更改。
示例,使用ExecuteReader方法创建一个读取tb_command表中所有数据的SqlDataReader对象,代码如下:
//实例化SqlConnection变量conn
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
conn.Open(); //打开连接
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand();
//设置Connection属性,指定其使用conn连接数据库
cmd.Connection = conn;
//设置CommandText属性,以及其执行的SQL语句
cmd.CommandText = "select* from tb_command";
//设置CommandType属性为Text,使其只执行SQL语句文本形式
cmd.CommandType = CommandType.Text;
//使用ExecuteReader方法实例化一个SqlDataReader对象
SqlDataReader sdr = cmd.ExecuteReader();
1、判断查询结果中是否有值
可以通过SqlDataReader对象的HasRows属性获取一个值,该值指示SqlDataReader是否包含一行或多行,即判断查询结果中是否有值。语法如下:
public override bool HasRows{get;}
其中,如果SqlDataReader包含一行或多行,该值为true,否则为false。示例代码如下:
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
conn.Open();
SqlCommand cmd = new SqlCommand("select* from "+textBox1.Text.Trim(), conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows){
MessageBox.Show("数据表中有值");
}
else{
MessageBox.Show("数据表中没有任何数据");
}
2、读取数据
可以通过ExecuteReader方法,根据SQL语句创建一个SqlDataReader对象后,再调用SqlDataReader对象的Read方法读取数据。Read方法使用SqlDataReader前进到下一条记录,SqlDataReader的默认位置在第一条记录前面。因此,必须调用Read方法访问数据。对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。
[注]:在使用SqlDataReader对象之前,必须打开数据库连接。如果针对一个SqlConnection,创建多个SqlDataReader对象,则创建下一个SqlDataReader对象之前,要通过Close方法关闭上一个SqlDataReader对象。
相关文章推荐
- C# 实现播放RTSP 标准协议码流播放
- C#调用cmd 脚本实例
- C#程序调用cmd执行命令(转)
- 大白话系列之C#委托与事件讲解(三)
- 大白话系列之C#委托与事件讲解(二)
- C#实现高精度定时器
- C# 委托及各种写法
- 大白话系列之C#委托与事件讲解(一)
- 大白话系列之C#委托与事件讲解(序言)
- c# 枚举类型
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 外部服务调用、内部服务调用优化,面向服务化的
- C#调用USER32.DLL的API函数
- c#面向对象基础 重写、虚方法、抽象类
- c#异步和多线程有什么区别和联系?
- C#将DLL嵌入到exe当中
- C# Socket多线程编程(一)
- C#-冒泡排序和选择排序
- 跟我学做c#皮肤美化(一)(转)
- c#事件实例三
- 浅谈C# Socket编程及C#如何使用多线程