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(); }