01 DataReader 对象概述
DataReader 对象是数据读取器对象,提供只读向前的游标。如果应用程序需要每次从数据库中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,那么就可以使用 DataReader 对象进行读取。对于不同的数据库连接,有不同的 DataReader 类型。
在 System.Data.SqlClient 命名空间下时,可以调用 SqlDataReader 类。
在 System.Data.OleDb 命名空间下时,可以调用 OleDbDataReader 类。
在 System.Data.Odbc 命名空间下时,可以调用 OdbcDataReader 类。
在 System.Data.Oracle 命名空间下时,可以调用 OracleDataReader 类。
在使用 DataReader 对象读取数据时,可以使用 ExecuteReader 方法,根据 SQL 语句的结果创建一个 SqIDataReader 对象。
说明
在创建 DataRelation 时,它首先验证是否可以建立关系,在创建 DataRelation 和将其添加到 DataRelationCollection(DataSet 的 DataRelation 对象的集合)之间的这段时间,可以对父行或子行进行其他更改。
例1
使用 ExecuteReader 方法创建一个读取 tb_command 表中所有数据的 SqlDataReader 对象。
“
代码如下:
”
conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd="); //连接数据库
conn.Open(); //打开数据库
SqlCommand cmd = new SqlCommand(); //创建 SqlCommand 对象
cmd.Connection = conn; //设置对象的连接
cmd.CommandText = "select * from tb_command"; //设置 SQL 语句
cmd.CommandType = CommandType.Text; //设置以文本形式执行 SQL 语句
//使用 ExecuteReader 方法创建 SqlDataReader 对象
SqlDataReader sdr = cmd.ExecuteReader();
02 判断查询结果中是否有值
可以通过 SqlDataReader 对象的 HasRows 属性获取一个值,该值指示 SqIDataReader 是否包含一行或多行,即判断查询结果中是否有值。
语法如下:
public override bool HasRows { get; }
属性值:如果 SqlDataReader 包含一行或多行,则为 true; 否则为 false。
例2
创建一个 Windows 应用程序,向窗体中添加一个 TextBox 控件和一个 Button 控件,分别用于输入要查询的表名以及执行查询操作,通过 SqlDataReader 对象的 HasRows 属性进行判断。如果 SqlDataReader 包含一行或多行,则为true;否则为 false。
“
代码如下:
”
private void button1_Click(object sender, EventArgs e)
{
try
{
//实例化 SqlConnection 变量 conn
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
//打开连接
conn.Open();
//创建一个 SqlCommand 对象
SqlCommand cmd = new SqlCommand("select * from "+textBox1.Text.Trim().conn);
//使用 ExecuteReader 方法创建 SqlDataReader 对象
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read(); //调用 Read 方法读取 SqlDataReader
if(sdr.HasRows) //使用 HasRows 属性判断结果中是否有数据
{
MessageBox.Show("数据表中有值") ; //弹出提示信息
}
else //否则
{
MessageBox.Show("数据表中没有任何数据");
}
}
catch(Exception ex)
{MessageBox.Show(ex.Message);
}
}
“
程序的运行结果如图1 所示。
图1 判断指定的数据表中是否有值
03 读取数据
可以通过 ExecuteReader 方法,根据 SQL 语句创建一个 SqIDataReader 对象后,再调用 SqlDataReader 对象的 Read 方法读取数据。Read 方法使 SqIDataReader 前进到下一条记录,SqlDataReader 的默认位置在第一条记录前面。因此,必须调用 Read 方法访问数据。对于每个关联的 SqlConnection,一次只能打开一个 SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。
语法如下:
public override bool Read()
返回值:如果存在多个行,则为true;否则为 false。
在使用完 SqlDataReader 对象后,要使用 Close 方法关闭 SqIDataReader 对象。
语法如下:
public override void Close()
例3
关闭 SqlDataReader 对象。
“
代码如下:
”
//实例化 SqlConnection 变量 conn
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
//打开连接
conn.Open();
//创建一个 SqlCommand 对象
SqlCommand cmd = new SqlCommand("select * from "+textBox1.Text.Trim().conn);
//使用 ExecuteReader 方法创建 SqlDataReader 对象
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Close();
例1 中已介绍通过 ExecuteReader 方法,根据 SQL 语句的结果创建一个 SqlDataReader 对象,读取 tb_commmand 表中的所有数据,所以此处不再赘述,大家可以参考例1 的代码。
说明
在使用 SqlDataReader 对象之前,必须打开数据连接。如果针对一个 SqlConnnection,创建多个 SqlDataReader 对象,则创建下一个 SqlDataReader 对象之前,要通过 Colse 方法关闭上一个 SqlDataReader 对象。
Love life,love yourself
关注小编不迷路呦~