01  DataReader 对象概述

C# 数据库读取数据_sql

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

C# 数据库读取数据_c#_02  在 System.Data.SqlClient 命名空间下时,可以调用 SqlDataReader 类。

C# 数据库读取数据_c#_02  在 System.Data.OleDb 命名空间下时,可以调用 OleDbDataReader 类。

C# 数据库读取数据_c#_02  在 System.Data.Odbc 命名空间下时,可以调用 OdbcDataReader 类。

C# 数据库读取数据_c#_02  在 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  所示。

C# 数据库读取数据_sql_06

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




C# 数据库读取数据_数据_07

Love life,love yourself

关注小编不迷路呦~