01  DataReader 对象概述

805615eca1dfd2b7174b9c144d0c978d.png

DataReader 对象是数据读取器对象,提供只读向前的游标。如果应用程序需要每次从数据库中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,那么就可以使用 DataReader 对象进行读取。对于不同的数据库连接,有不同的 DataReader 类型。

4575d65dcdf5ee747aa3348d804bb991.png  在 System.Data.SqlClient 命名空间下时,可以调用 SqlDataReader 类。

73f3d26cc762319df6873d0c65f6c525.png  在 System.Data.OleDb 命名空间下时,可以调用 OleDbDataReader 类。

979a54af044167d353e056eab5929ca3.png  在 System.Data.Odbc 命名空间下时,可以调用 OdbcDataReader 类。

17b26d9a2c6b273bba29256175b01980.png  在 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  所示。

a1b7ef643469bca0f8398e2eb6bd40c0.png

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

往期推荐

67a5bb8b8c52f1f39ee486f10ae30ca6.png

Love life,love yourself

关注小编不迷路呦~

-----------------------------------

需要进技术群交流的,请添加小编mm1552923

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐