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对象。