DataReader类访问字段的值

 

DataReader类访问字段的值


       有2种方法。第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。第二种是Get方法,此方法返回有字段索引指定的字段的值。有点难以理解,不是吗?不要紧,看例子就OK了。

       Item属性

       每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select Fid,Fname from friend,则我们可以使用下面的方法取得返回的值:

         object ID = dr[“Fid”];

object Name = dr[“Fname”];

或者:

       object ID = dr[0];

object Name = dr[0];

注意索引总是从0开始的。另外也许您发现了我们使用的是object来定义对ID和Name,是的,Item属性返回的值是object型,但是您可以强制类型转换。

       int ID = (int)dr[“Fid”];

string Name = (string)dr[“Fname”];

记住:确保类型转换的有效性是您自己的责任,否则您将得到异常。

       Get方法

       起始我们在第一篇文章里面已经使用过改方法了。每个DataReader都定义了一组Get方法,比如GetInt32方法把返回的字段值作为.net clr 32位证书。同上面的例子一样我们用如下方式访问Fid和Fname的值:

int ID = dr.GetInt32(0);

string Name = dr.GetString(1);

注意虽然这些方法把数据从数据源类型转化为.net数据类型,但是他们不执行其他的数据转换,比如他们不会把16位整数转换为32位的。所以您必须使用正确的Get方法。另外Get方法不能使用字段名来访问字段,也就是说上面的没有:

int ID = dr.GetInt32(“Fid”);                             //错误

string Name = dr.GetString(“Fname”);              //错误

显然上面这个缺点在某些场合是致命的,当你的字段很多的时候,或者说你过了一段时间以后再来看你这些代码,你会觉得很难以理解!当然我们可以使用其他方法来尽量解决这个问题。一个可行的办法是使用const:

const int FidIndex = 0;

const int NameIndex = 1;

int ID = dr.GetInt32(FidIndex);

string Name = dr.GetString(NameIndex);

这个办法并不怎么好,另外一个好一些的办法:

int NameIndex = dr.GetOrdinal(“Fname”);       //取得Fname对应的索引值

string Name = dr.GetString(NameIndex);

这样似乎有点麻烦,但是当须要遍历阅读器种大量的结果集的时候,这个方法很有效,因为索引只需执行一次。

int FidIndex = dr.GetOrdinal(“Fid”);

int NameIndex = dr.GetOrdinal(“Fname”);

while(dr.Read())

{

         int ID = dr.GetInt32(FidIndex);

         string Name = dr.GetInt32(NameIndex);

}

posted @ 2004-04-30 16:36  aierong  阅读(1698)  评论(0编辑  收藏  举报