9.5.1 使用DataReader读取单记录集

  DataReader 是只读只进的读取方式,所谓只读,就是我们只能通过它获取数据而不能修改数据;所谓只进,就是读取记录的游标只会不断前进,我们不能在读取了第5条记录以后再返回去读取第2条记录。因此,往往我们会使用循环语句来读取记录集。SQL语句支持使用分号隔开一次获取多个记录集,同样DataReader也支持读取多个记录集。我们先来看一段代码,该代码实现从 tbBoard 读取所有记录,并以表格的形式呈现记录,效果如图所示。

图,使用 DataReader 读取单记录集

 

  要测试这段代码,新建一个页面,在页面的 Page-Load 事件处理方法中加入下列代码(别忘记using System.Data.SqlClient):

using  System;
using  System.Data;
using  System.Data.SqlClient;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

public   partial   class  _951 : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
string  sConnectionString  =   @" server=(local)\SQLEXPRESS;database=Forum;Trusted_Connection=True " ;
        
using  (SqlConnection conn  =   new  SqlConnection(sConnectionString))
        {
            conn.Open();
            
using  (SqlCommand cmd  =   new  SqlCommand( " Select * from tbBoard " , conn))
            {
                
using  (SqlDataReader dr  =  cmd.ExecuteReader())   // 得到一个 DataReader
                {
                    
if  (dr.HasRows)  // 记录集是否为空
                    {
                        
// 使用 StringBuilder 构造字符串效率比较高
                        System.Text.StringBuilder htmlStr  =   new  System.Text.StringBuilder();
                        
// 表格开始
                        htmlStr.Append( " <table border='1' cellPadding='5' cellSpacing='0' style='font-size:9pt;font:宋体'> " );
                        htmlStr.Append(
" <tr style='background-color=#f0f0f0'> " );     // 表头开始
                         for  ( int  i  =   0 ; i  <  dr.FieldCount; i ++ )
                        {
                            htmlStr.Append(
string .Format( " <td><strong>{0}</strong></td> " , dr.GetName(i)));   // 构造表头
                        }
                        htmlStr.Append(
" </tr> " );     // 表头结束
                         while  (dr.Read())
                        {
                            htmlStr.Append(
" <tr> " );  // 记录行开始
                             for  ( int  i  =   0 ; i  <  dr.FieldCount; i ++ )
                            {
                                htmlStr.Append(
string .Format( " <td>{0}</td> " , dr.GetValue(i)));   // 构造记录行
                            }
                            htmlStr.Append(
" </tr> " );     // 记录行结束
                        }
                        htmlStr.Append(
" </table> " );  // 表格结束
                        Response.Write(htmlStr);
                    }
                }
            }
        }
    }
}

 

  1. 由于我们希望读取记录集,因此SQL语句使用的是Select语法,而不是 Insert、Update和Delete。

  2. DataReader 对象是不能直接使用 new 关键词实例化的,我们可以通过 Command 对象的 ExecuteReader() 方法获得一个 DataReader 对象。

  3. DataReader 是一行一行向前读取记录的,因此我们常使用 while(dr.Read()) 来遍历所有行。 Read() 方法能使 DataReader 读取一条记录并前进到下一条记录,如果已经到达了记录集的底部则返回 false。

  4. DataRead 对象的一些重要属性如下:

  · FieldCount。获取当前行中的列数。我们的程序需要遍历所有列,可以使用这个属性获得列数。

  · HasRows。指示 DataReader 是否包含一行或多行。在读取记录集内容以前使用这个属性来判断记录集中是否有记录。

  5. DataRead 对象的一些重要方法如下:
  · GetInt16()、GetString()、GetDateTime()等 GetXXX方法(其中XXX是.NET的一种类型)。使用这些方法可以读取行中的某列的值,并直接以相应的.NET类型返回。

  · GetValue() 和 GetName()。使用 GetValue()方法可能读取行中某列的值,它和上面的 GetXXX()差不多,只不过返回 object 类型的值。GetName() 则返回行中某列的名。

转载于:https://www.cnblogs.com/0754ydj/archive/2008/07/31/1256942.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值