找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2412|回复: 12

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

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:29
  • 打卡月天数:1
  • 打卡总奖励:7791
  • 最近打卡:2025-12-13 17:25:16

2540

主题

1355

回帖

2万

积分

管理员

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

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

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

创建SQL Server数据库、数据表:
  1. USE master;
  2. GO
  3.   
  4. --创建数据库
  5. IF NOT EXISTS(SELECT * FROM dbo.sysdatabases WHERE [name]='TestDB')
  6.     CREATE DATABASE TestDB;
  7. GO
  8.   
  9. --使用数据库
  10. USE TestDB;
  11. GO
  12.   
  13. --创建用户表
  14. IF EXISTS(SELECT * FROM sysobjects WHERE [name]='Users')
  15.     DROP TABLE [Users]
  16. GO
  17. CREATE TABLE [Users](
  18.         [Id] [int] IDENTITY(1,1),--主键
  19.         [Name] [nvarchar](50) NOT NULL,--姓名
  20.         [Sex] [nvarchar](10),--性别
  21.         PRIMARY KEY([Name])
  22. );
  23. GO
  24.   
  25. INSERT INTO [Users]([Name],[Sex]) VALUES ('Alice','Female');
  26. INSERT INTO [Users]([Name],[Sex]) VALUES ('Amy','Female');
  27. INSERT INTO [Users]([Name],[Sex]) VALUES ('Bruce','Male');
复制代码
示例代码:
  1. static void Main(string[] args)
  2. {
  3.     string connectionString = "Data Source=127.0.0.1,1433;Initial Catalog=TestDB;uid=sa;pwd=123456;";
  4.     string sqlstring = "SELECT * FROM [Users];";

  5.     SqlConnection conn = new SqlConnection(connectionString);
  6.     try
  7.     {
  8.         conn.Open();
  9.         SqlCommand cmd = new SqlCommand(sqlstring, conn);
  10.         SqlDataReader reader = cmd.ExecuteReader();
  11.         if (reader.HasRows)
  12.         {
  13.             Console.WriteLine("有数据");
  14.         }
  15.         else
  16.         {
  17.             Console.WriteLine("无数据");
  18.         }

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

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

  29.             Console.WriteLine("");
  30.         }

  31.         //----------------属性----------------------
  32.         Console.WriteLine("表中有几个字段:" + reader.FieldCount);
  33.         Console.WriteLine("是否关闭:" + reader.IsClosed);
  34.         reader.Close();
  35.         Console.WriteLine("是否关闭:" + reader.IsClosed);
  36.     }
  37.     catch (Exception ex)
  38.     {
  39.         Console.WriteLine(ex.Message.ToString());
  40.     }
  41.     finally
  42.     {
  43.         conn.Close();
  44.     }
  45.     Console.Read();
  46. }

  47. 作者最新文章
  48. C# 删除一维数组内的某个值(元素), C# 删除数组元素的方法
  49. C# 如何判断一个字符串是否包含另一个字符串的方法,C# IndexOf 的使用
  50. Winform 只能输入整数的TextBox (文本框) 控件
  51. Winform 禁止重复启动,单实例exe程序
  52. Winform TextBox (文本框) 控件禁止输入内容
  53. 推荐文章
  54. .NET Framework 版本下载
  55. C# 变量, 方法命名规则
  56. C# 常用数据库连接字符串, SQL Server, MySQL, Oracle, Access mdb
  57. Windows IIS 注册 ASP.NET 运行环境
  58. IIS 启动, 停止, 重启cmd命令
复制代码



工控课堂 www.gkket.com

0

主题

167

回帖

355

积分

注册会员

积分
355
发表于 2021-10-5 20:44:26 | 显示全部楼层
看了一遍原文,不懂;又看了一遍原文,还是不懂。再看了一遍原文,实在不懂。最后看了一遍回帖,懂了我为什么不懂……于是我懂了,人有时候要学会放弃。
工控课堂 www.gkket.com

0

主题

59

回帖

100

积分

新手上路

积分
100
发表于 2021-10-5 21:42:58 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

103

回帖

158

积分

新手上路

积分
158
发表于 2025-11-13 22:32:59 | 显示全部楼层
楼主太会说了,字字句句都在理~
工控课堂 www.gkket.com

0

主题

233

回帖

496

积分

注册会员

积分
496
发表于 2025-11-21 15:38:43 | 显示全部楼层
画面感太强了,仿佛身临其境!
工控课堂 www.gkket.com

0

主题

71

回帖

99

积分

新手上路

积分
99
发表于 2025-11-24 01:25:33 | 显示全部楼层
来凑个热闹,增加点人气~
工控课堂 www.gkket.com

0

主题

96

回帖

148

积分

新手上路

积分
148
发表于 2025-11-24 01:41:33 | 显示全部楼层
不请自来,就想夸一句:太顶了!
工控课堂 www.gkket.com

0

主题

113

回帖

340

积分

注册会员

积分
340
发表于 2025-11-24 01:42:00 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com

0

主题

95

回帖

146

积分

新手上路

积分
146
发表于 2025-11-24 01:46:36 | 显示全部楼层
内容太顶了!疯狂点赞,已默默收藏~
工控课堂 www.gkket.com

0

主题

180

回帖

386

积分

注册会员

积分
386
发表于 2025-11-24 01:47:59 | 显示全部楼层
水个经验,支持楼主,加油呀
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

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

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

GMT+8, 2025-12-23 03:56 , Processed in 0.096704 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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