首页 > 编程笔记 > C#笔记 阅读:20

C# DataReader对象的用法(附带实例)

DataReader 对象是一个简单的数据集,它主要用于从数据源中读取只读的数据集,其常用于检索大量数据。

根据 .NET Framework 数据提供程序的不同,DataReader 对象可以分为 SqlDataReader、OleDbDataReader、OdbcDataReader 和 OracleDataReader 这 4 大类。

由于 DataReader 对象每次只能在内存中保留一行,所以使用它的系统开销非常小。

使用 DataReader 对象读取数据时,必须一直连接数据库,所以这种连接模式也被称为连线模式,其架构如下图所示(这里以 SqlDataReader 为例)。


图 1 使用 SqlDataReader 对象读取数据

DataReader 对象是一个轻量级的数据对象,如果只需要将数据读出并显示,那么它是最合适的工具,因为它的读取速度比后面要讲解到的 DataSet 对象要快,占用的资源也更少。但是,一定要铭记:DataReader 对象在读取数据时,要求数据库一直处于连接状态,只有在读取完数据之后才能断开连接。

开发人员可以通过 Command 对象的 ExecuteReader() 方法从数据源中检索数据来创建 DataReader 对象,DataReader 对象的常用属性及说明如下表所示:

表:DataReader 对象的常用属性及说明
属性 说明
HasRows 判断数据库中是否有数据
FieldCount 获取当前行的列数
RecordsAffected 获取执行SQL语句所更改、添加或删除的行数

DataReader 对象的常用方法及说明如下表所示:

表:DataReader 对象的常用方法及说明
方法 说明
Read 使 DataReader 对象前进到下一条记录
Close 关闭 DataReader 对象
Get 用来读取数据集当前行某一列的数据

使用DataReader对象检索数据

使用 DataReader 对象读取数据时,首先需要使用其 HasRows 属性判断是否有数据可供读取,如果有数据,则返回 true,否则返回 false;然后使用 DataReader 对象的 Read() 方法来循环读取数据表中的数据;最后通过访问 DataReader 对象的列索引来获取读取到的值,例如,sqldr["ID"] 用来获取数据表中 ID 列的值。

【实例】获取编程词典信息并分列显示。创建一个 Windows 应用程序,在默认窗体中添加一个 RichTextBox 控件,用来显示使用 SqlDataReader 对象读取到的数据表中的数据,代码如下:
private void Form1_Load(object sender, EventArgs e)
{
    // 创建数据库连接对象
    SqlConnection sqlcon = new SqlConnection("Server=XIAOKE;User Id=sa;Pwd=;Database=db_EMS");
    // 创建SqlCommand对象
    SqlCommand sqlcmd = new SqlCommand("select * from tb_PDic order by ID asc", sqlcon);
    if (sqlcon.State == ConnectionState.Closed)  // 判断连接是否关闭
    {
        sqlcon.Open();  // 打开数据库连接
    }
    // 使用ExecuteReader方法的返回值创建SqlDataReader对象
    SqlDataReader sqldr = sqlcmd.ExecuteReader();
    richTextBox1.Text = "编号\t版本\t价格\n";  // 为文本框赋初始值
    try
    {
        if (sqldr.HasRows)  // 判断SqlDataReader对象中是否有数据
        {
            while (sqldr.Read())  // 循环读取SqlDataReader对象中的数据
            {
                richTextBox1.Text += "" + sqldr["ID"] + "\t" + sqldr["Name"] + "\t" + sqldr["Money"] + "\n";  // 显示读取的详细信息
            }
        }
    }
    catch (SqlException ex)  // 捕获数据库异常
    {
        MessageBox.Show(ex.ToString());  // 输出异常信息
    }
    finally
    {
        sqldr.Close();  // 关闭SqlDataReader对象
        sqlcon.Close();  // 关闭数据库连接
    }
}
程序运行结果为:


图 2 使用DataReader对象读取数据

相关文章