DataReader--优点

---他山之石,可以攻玉。

http://editblog.csdn.net/msdncolumn/archive/2005/02/25/1657.aspx

使用 DataReader 来提高速度并减少内存使用

作者:Rick Dobson
相关技术:ADO.NET、C#、数据库开发
难度:★★★☆☆
读者类型:.NET开发人员、数据库开发人员

    [导读]谈及数据库连接时,.NET的拥护者会力推数据适配器和数据集所提供的离线访问的优势。每每在这个时候,DataReader就会被这二者的光芒所掩盖。但是,正如Rick Dobson在此处演示的那样,DataReader绝非常物—它们提供对数据源的只进、只读连线访问,而且它们不支持数据操作。那么,为什么还要使用如此束缚人的东西呢?答案是“性能”,对于入门者来说,使用DataReader要快很多;另一个好处是占用的内存较少—DataReader可让您在获得数据的同时就对它进行处理,每次一行。所以,DataReader特别适用于处理过于庞大以致于无法加载到内存中的数据。

    为了从DataReader获得最大的利益,您需要了解它的功能和限制。由于DataReader具有定义完善的限定,您还可以了解一下如何利用其他.NET实体(例如“数组”)来补充DataReader的功能,并从中获益。本文通过在三个范畴中各自的一些示例应用程序来回顾DataReader的功能。首先,我将展示生成、填充并配置DataReader以便用于Windows窗体控件的有效代码模式;第二,对示例突出说明了如何使用类型化数据来计算表达式,这将反映DataReader中列的数据类型的特性;最后,我将比较通过DataReader来检索分层数据的两种技术,来为本文划上句号。

从DataReader到列表框

    您可以用指向数据源的DataReader来轻松地填充列表框。本部分的示例通常也应用于组合框控件。您应首先为Command对象创建DataReader并调用ExecuteReader方法,该方法通常是内建的。ExecuteReader方法可以接受CommandBehavior枚举来自定义Command的行为以及它所关联的DataReader。本部分中的两个示例突出了DataReader及其Command对象之间的相互作用,并提供了有关窗体和控件管理的其他有趣的应用程序的详细信息。请参阅HCVSDataReaders项目(源代码中的HVSO4-07Dobon.exe),以访问每个示例的所有代码。

显示原始的DataReader数据

    HCVSDataReaders项目中的第一个DataReader示例是在Form1上Button1的Click事件中,ADONETObjects类中的两个方法和Form1后面的DataReaderForTable函数过程也在该事件中。为方便起见,ADONETObjects类驻留在HCVSDataReaders项目中。图1显示单击Populate from DataReader按钮后的窗体。按钮的Click事件过程用从SQL Server Northwind数据库中的Employees表选定的列值来填充列表框。


图1

    SqlDataReader类有很多特殊方法,用于从各种专用的.NET和SQL Server数据格式中获取数据。不过,对于简单的应用程序来说,您无须考虑它们。所有DataReader都需要做的事情是,接受从任何非字符串数据类型到字符串的默认转换,然后将一个经过计算的字符串表达式添加到列表框。这就是下面的代码所要做的事情,它来自Button1_Click过程。一个While循环逐行读取,每次创建一个包含四个对drd1 DataReader的引用的str2表达式。这些引用中有两个是数字实例。值甚至可以为空(如2号雇员的ReportsTo列值)。不过,对每一行来说,该表达式都是成功的。您可以按名称或基于零的索引来指定列。

Do While drd1.Read
    Dim str2 As String = _
        "Employee " & drd1("EmployeeID") & _
        ", " & drd1("FirstName") & _
        " " & drd1("LastName") & _
        " reports to: " & drd1("ReportsTo")
    ListBox1.Items.Add(str2)
Loop

    第一个示例中最有趣的部分可能是如何先创建drd1 DataReader。Button1的Click事件过程将drd1创建为一个SqlDataReader类,并将我创建的名为ataReaderForTable的函数的返回值指定给它。它传递Employees表的名称—DataReaderForTable为其开发了一个DataReader。

Dim drd1 As SqlClient.SqlDataReader = _
    DataReaderForTable("Employees")

    DataReaderForTable过程创建DataReader的步骤有三个。

Dim drd1 As SqlClient.SqlDataReader
Dim ADOObjs As New ADONETObjects

'Specify connection object
Dim cnn1 As SqlClient.SqlConnection = _
    ADOObjs.MakeNorthwindConnection

'Specify a command object
Dim str1 As String = _
    "SELECT * FROM

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值