C# 使用 DataReader 对象访问 SQL Server 数据库并读取数据,DataReader 对象如何使用

DataReader对象提供了用顺序的,只读的方式读取Command对象获得的数据结果集,正是因为DataReader是以顺序的方式连续的读取数据,所有DataReader会以独占的方式打开数据库的连接,由于DataReader只执行读的操作(只读),并且每次只在内存缓冲区里存储结果集中的一条数据,所有使用DataReader的对象的效率比较高,如果要查询大量数据,同时不需要随机访问和修改数据,DataReader是优先的选择。

DataReader 对象的常用属性
    FieldCount 属性 表示记录中有多少字段
    HasRows 属性 用来表示DataReader是否包含数据
    IsClosed 属性 表示DataReader是否关闭

DataReader对象常用方法
    Close 方法 将DataReader对象关闭
    GetDataTypName 方法 取得指定的字段数据形态(类型)
    GetName 方法 取得指定的字段数据名称
    GetOrdinal 方法 取得指定字段名称在记录中的顺序
    GetValue 方法 取得指定字段的数据
    GetValues 方法 取得全部字段的数据
    Read 方法 读取下一条记录


创建SQL Server数据库、数据表:

USE master;
GO
 
--创建数据库
IF NOT EXISTS(SELECT * FROM dbo.sysdatabases WHERE [name]='TestDB')
    CREATE DATABASE TestDB;
GO
 
--使用数据库
USE TestDB;
GO
 
--创建用户表
IF EXISTS(SELECT * FROM sysobjects WHERE [name]='Users')
    DROP TABLE [Users]
GO
CREATE TABLE [Users](
        [Id] [int] IDENTITY(1,1),--主键
        [Name] [nvarchar](50) NOT NULL,--姓名
        [Sex] [nvarchar](10),--性别
        PRIMARY KEY([Name])
);
GO
 
INSERT INTO [Users]([Name],[Sex]) VALUES ('Alice','Female');
INSERT INTO [Users]([Name],[Sex]) VALUES ('Amy','Female');
INSERT INTO [Users]([Name],[Sex]) VALUES ('Bruce','Male');


示例代码:

static void Main(string[] args)
{
    string connectionString = "Data Source=127.0.0.1,1433;Initial Catalog=TestDB;uid=sa;pwd=123456;";
    string sqlstring = "SELECT * FROM [Users];";

    SqlConnection conn = new SqlConnection(connectionString);
    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sqlstring, conn);
        SqlDataReader reader = cmd.ExecuteReader();
        if (reader.HasRows)
        {
            Console.WriteLine("有数据");
        }
        else
        {
            Console.WriteLine("无数据");
        }

        //----------------方法----------------------
        Console.WriteLine("第一列的数据类型:" + reader.GetDataTypeName(0));
        Console.WriteLine("第一列的名称:" + reader.GetName(0));
        Console.WriteLine("指定名称序号:" + reader.GetOrdinal("sex"));

        // 访问DataReader 对象时使用索引要比字段名称快很多
        while (reader.Read())
        {
            Console.Write(reader[0].ToString() + ",");
            Console.Write(reader[1].ToString() + ",");
            Console.Write(reader["sex"].ToString());

            Console.WriteLine("");
        }

        //----------------属性----------------------
        Console.WriteLine("表中有几个字段:" + reader.FieldCount);
        Console.WriteLine("是否关闭:" + reader.IsClosed);
        reader.Close();
        Console.WriteLine("是否关闭:" + reader.IsClosed);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message.ToString());
    }
    finally
    {
        conn.Close();
    }
    Console.Read();
}

作者最新文章
C# 使用 CSVHelper 操作 csv 文件, .net core, .net framework 读取写入 csv 文件
C# 实现字符串文本换行的方法,文本如何换行
C# 如何循环读取文件每一行文本内容
C# DateTime AddMonths 的错误用法导致跳过日期
C# 全角转换半角,半角转换为全角