科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道DataReader对象

DataReader对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

介绍DataReader对象

作者:ghost 来源:CSDN 2007年9月24日

关键字: ghost DataReader 对象

  • 评论
  • 分享微博
  • 分享邮件
1  DataReader对象的常用属性
DataReader对象提供了用顺序的、只读的方式读取用Command对象获得的数据结果集。由于 DataReader只执行读操作,并且每次只在内存缓冲区里存储结果集中的一条数据,所以使用DataReader对象的效率比较高,如果要查询大量数据,同时不需要随机访问和修改数据,DataReader是优先的选择。
DataReader对象有以下常用属性。
Ü  FieldCount属性:该属性用来表示由DataReader得到的一行数据中的字段数。
Ü  HasRows属性:该属性用来表示DataReader是否包含数据。
Ü  IsClosed属性:该属性用来表示DataReader对象是否关闭。
2  DataReader对象的常用方法
同样,在SQL Server Data Provider里的DataReader对象叫SqlDataReader,而在OLE DB Data Provider里叫OleDbDataReader。
DataReader对象使用指针的方式来管理所连接的结果集,它的常用方法有关闭方法、读取记录集下一条记录和读取下一个记录集的方法、读取记录集中字段和记录的方法,以及判断记录集是为空的方法。
1. Close方法
Close方法不带参数,无返回值,用来关闭DataReader对象。由于DataReader在执行 SQL命令时一直要保持同数据库的连接,所以在DataReader对象开启的状态下,该对象所对应的Connection连接对象不能用来执行其他的操作。所以,在使用完DataReader对象时,一定要使用Close方法关闭该DataReader对象,否则不仅会影响到数据库连接的效率,更会阻止其他对象使用Connection连接对象来访问数据库。
2. bool Read()方法
bool Read()方法会让记录指针指向本结果集中的下一条记录,返回值是true或false。当Command的ExecuteReader方法返回 DataReader对象后,须用Read方法来获得第一条记录;当读好一条记录想获得下一下记录时,也可以用Read方法。如果当前记录已经是最后一条,调用Read方法将返回false。也就是说,只要该方法返回true,则可以访问当前记录所包含的字段。
3. bool NextResult()方法
bool NextResult()方法会让记录指针指向下一个结果集。当调用该方法获得下一个结果集后,依然要用Read方法来开始访问该结果集。
4. Object GetValue(int i)方法
Object GetValue(int i)方法根据传入的列的索引值,返回当前记录行里指定列的值。由于事先无法预知返回列的数据类型,所以该方法使用Object类型来接收返回数据。
5. int GetValues (Object[] values)方法
int GetValues (Object[] values)方法会把当前记录行里所有的数据保存到一个数组里并返回。可以使用FieldCount属性来获知记录里字段的总数,据此定义接收返回值的数组长度。
6. 获得指定字段的方法
获得指定字段的方法有GetString、GetChar、GetInt32等,这些方法都带有一个表示列索引的参数,返回均是Object类型。用户可以根据字段的类型,通过输入列索引,分别调用上述方法,获得指定列的值。
例如,在数据库里,id的列索引是0,通过
string id = GetString (0);
代码可以获得id的值。
7. 返回列的数据类型和列名的方法
可以调用GetDataTypeName()方法,通过输入列索引,获得该列的类型。这个方法的定义是:
string GetDataTypeName (int i)
可以调用GetName()方法,通过输入列索引,获得该列的名称。这个方法的定义是:
string GetName (int i)
综合使用上述两方法,可以获得数据表里列名和列的字段。
8. bool IsDBNull(int i)方法:
bool IsDBNull(int i)方法的参数用来指定列的索引号,该方法用来判断指定索引号的列的值是否为空,返回True或False。
3  DataReader对象访问数据库代码示例
下面的代码将说明如何利用DataReader对象获得并访问结果集。
//连接字符串
private static string strConnect = "data source=localhost; 论uid=sa;pwd=aspnet;database=LOGINDB"
SqlConnection objConnection = new SqlConnection(strConnect);
SqlCommand objCommand = new SqlCommand("", objConnection);
// 设置查询类的SQL语句  
objCommand.CommandText =  "SELECT * FROM USERS ";
try
{
        // 打开数据库连接
        if (objConnection.State == ConnectionState.Closed)
        {
objConnection.Open();
}
        // 获取运行结果
        SqlDataReader result = objCommand.ExecuteReader();
//如果DataRead对象成功获得数据,返回true,否则返回false
if (result.Read() == true)
    {
         // 输出结果集中的各个字段
         Response.Write(result["USERID"].ToString());
         Response.Write(result["NICKNAME"].ToString());
Response.Write(result["USERROLE"].ToString());
}
}
catch(SqlException e)
{
         Response.Write(e.Message.ToString());
}
finally
{
         // 关闭数据库连接
if (objConnection.State == ConnectionState.Open)
{
objConnection.Close();
}
// 关闭dataRead对象
if(result.IsClosed == false)
{
    result.Close();
}
}
在代码里,给出了两种使用DataReader对象访问结果集的方式,一种是直接根据字段名,利用result["USERID"]的形式获得特定字段的值;另一种方式写在注释里,通过for循环,利用 FieldCount属性和GetValue方法,依次访问数据集的字段。
DataReader 提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时, DataReader 是一种适合的选择。另外值得注意的是,DataReader在读取数据时,限制每次只能读一条,这样无疑提高了读取效率,一般适用于返回结果只有一条数据的情况。如果返回的是多条记录,就要慎用此对象。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1684713

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章