热线电话:13121318867

登录
2019-03-14 阅读量: 827
SQL Server一一数据读取器

1. 数据读取器概述

数据读取器不能直接实例化,而是通过执行命令对象的ExecuteReader方法创建它的实例。

SqlDataReader rdr = cmd.ExecuteReader();

该数据读取器可用来访问查询的结果集。

(1). 使用序数索引器

示例使用while循环完成读取每行记录,由于Read()表示如果存在下一行,该方法返回true,否则,返回false

while(rdr.Read())

{

TBox_Text.Items.Add(rdr[0]);

}

这个程序使用了序数索引器查找方法,为读取器提供列号来获取值,索引0表示第一列,以此类推。

(2). 使用列名索引器

由于列名更容易记住,所以多数情况下,使用列名来进行索引

例如,存在FirstName和LastName两列数据:

while(rdr.Read())

{

txtValues.AppendText(rdr["FirstName"].ToString());

txtValues.AppendText(rdr["LastName"].ToString());

}

(3). 使用类型访问器方法

只要知道返回值的类型,就可以使用这种方法

如下查询语句

//Query

string sql1 = @"select CardType, CardNumber, ExpMonth, ExpYear from Sales.CreditCard";

while(rdr.Read())

{

txtTypeAccess.AppendText(rdr.GetString(0).PadRight(30));

txtTypeAccess.AppendText(rdr.GetString(1));

txtTypeAccess.AppendText(rdr.GetByte(2).ToString());

txtTypeAccess.AppendText(rdr.GetInt16(3).ToString());

}

2. 获取数据的信息

Depth:该属性表示当前行嵌套的深度

FieldCount:该属性表示当前行中的列数

GetDataTypeName:该方法接受索引并返回列数据类型的名称额字符串

GetFieldType:该方法接受索引并返回对象的.NET Framework类型

GetName:该方法接受索引并返回指定列的列名

GetOrdinal:该方法接受列名并返回列索引

GetSchemaTable:该方法返回列的元数据

HasRows:该属性表示数据读取器是否包含数据行

RecordsAffected:该属性表示已更新,插入或删除的数据行的数目

3. 获取表的数据

       利用数据读取器的GetSchemaTable方法,表示对所查询的表的描述,以DataRow和DataColumn对象的形式包含行和列的集合。这些行和列由DataTable类的Rows和Columns属性以集合对象的形式返回。

SqlCommand cmd = new SqlCommand(sql, conn);

SqlDataReader rdr = cmd.ExecuteReader();

DataTable schema = rdr.GetSchemaTable();

//Display info from each row in the data table

foreach(DataRow row in schema.Rows)

{

foreach(DataColumn col in schema.columns)

{

txtSchema.AppendText(col.ColumnName + " = " + row[col]);

txtSchema.AppendText("\n");

}

txtSchema.AppendText("-----------------------");

}

4. 使用数据读取器处理多个结果集

有时想快点完成工作,同时使用两个或者多个查询。

例如要读取如下两条sql指令:

//Query1

string sql1 = @"select CountryRegionCode,Name

from Person.CountryRegion

where Name like 'A%' ";

//Query2

string sql2 = @"select FirstName, LastName

from Person.Contact";

//Combining queries to produce multiple result set

string sql = sql1 + sql2;

利用NextResult方法来处理多个结果集

do

{

txtResult.AppendText(rdr.GetName(0));

txtResult.AppendText("\t\t");

txtResult.AppendText(rdr.GetName(1));

txtResult.AppendText("\n");

txtResult.AppendText("".PadLeft(30, "="));

txtResult.AppendText("\n");

while(rdr.Read())

{

txtResult.AppendText(rdr[0].ToString());

txtResult.AppendText("\t\t");

txtResult.AppendText(rdr[1].ToString());

txtResult.AppendText("\n");

}

}

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子