找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1747|回复: 12

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

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:28
  • 打卡月天数:7
  • 打卡总奖励:7961
  • 最近打卡:2025-12-22 17:16:30

3317

主题

285

回帖

2万

积分

管理员

积分
24108
发表于 2021-8-22 12:35:49 | 显示全部楼层 |阅读模式
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();
}


工控课堂 www.gkket.com

13

主题

396

回帖

2653

积分

高级会员

积分
2653
发表于 2021-8-22 12:35:50 | 显示全部楼层
我只是路过打酱油的。
工控课堂 www.gkket.com
  • 打卡等级:即来则安
  • 打卡总天数:28
  • 打卡月天数:7
  • 打卡总奖励:7961
  • 最近打卡:2025-12-22 17:16:30

3317

主题

285

回帖

2万

积分

管理员

积分
24108
 楼主| 发表于 2021-8-22 13:38:58 | 显示全部楼层
绝对干货,楼主给力,支持了!!!
工控课堂 www.gkket.com

0

主题

108

回帖

178

积分

新手上路

积分
178
发表于 2025-11-18 09:00:40 | 显示全部楼层
水个经验,楼主加油,支持你~
工控课堂 www.gkket.com

0

主题

98

回帖

157

积分

新手上路

积分
157
发表于 2025-11-18 09:14:20 | 显示全部楼层
求个链接 / 教程,楼主好人一生平安~
工控课堂 www.gkket.com

0

主题

439

回帖

2698

积分

高级会员

积分
2698
发表于 2025-11-18 09:14:27 | 显示全部楼层
蹲一波同款,有没有小伙伴推荐?
工控课堂 www.gkket.com

0

主题

117

回帖

255

积分

注册会员

积分
255
发表于 2025-11-18 09:15:07 | 显示全部楼层
水个经验,支持楼主,加油呀
工控课堂 www.gkket.com

0

主题

592

回帖

1747

积分

高级会员

积分
1747
发表于 2025-11-18 09:16:30 | 显示全部楼层
浅评一下:内容优质,值得推荐~
工控课堂 www.gkket.com

0

主题

100

回帖

260

积分

注册会员

积分
260
发表于 2025-11-18 09:17:08 | 显示全部楼层
浅蹲一个后续,楼主更新踢我一下
工控课堂 www.gkket.com

0

主题

582

回帖

2068

积分

高级会员

积分
2068
发表于 2025-11-18 09:19:21 | 显示全部楼层
这评论区卧虎藏龙,个个都是人才!
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 12:35 , Processed in 0.128741 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表