首页  ·  知识 ·  云计算
ADO.NET入门(4)
李彬|libin2722@sohu.com  本站原创  综合  编辑:libin2722  图片来源:网络
lang=EN-US "FONT-SIZE: 13.5

ADO.NET入门(4)

4.转换现有代码

  

    大量的ASP页面使用ADO对象来抽取数据.让我们一起来回顾下几例典型的案例,对你在以后处理移植或者改写代码时也许会有帮助。

  

    如果你有从单个recordset生成报表的ASP页面,那么DataReader会是你的好帮手。

  

  String strConn, strCmd;

  strConn = "DATABASE=MyAgenda;SERVER=localhost;UID=sa;PWD=;";

  strCmd = "Select * From Names where ID=" + contactID.Text;

  SQLConnection oCN = new SQLConnection(strConn);

  SQLCommand oCMD = new SQLCommand(strCmd, oCN);

  oCN.Open();

  SQLDataReader dr;

  oCMD.Execute(out dr);

  while (dr.Read()) {

  // Use dr.GetString(index) or

  // dr["field name"] to Response.Write data

  }

  

    你可以利用HasMoreRows属性来快速检查是否DataReader为空.如果你仅仅只简单处理一系列记录,没有什么比DataReader.更快,更好的对象了,它同样适用于查询单个记录。

  

    DataReader.的内容是不可编辑的,但你可以将内容移动到更具管理功能的对象里,如:

  

     DataTable或是一个或多个DataRow 对象.

  

    当你需要处理表与记录二者之间的复杂关系时,DataReader就不是合适的工具了。数据模型链接越多,SQL命令则会越复杂。导航模块保有连续性,最后放入缓存的数据往往多于你所需要的,. DataSet DataRelation objects是这种表关系模型的基础.

  

    为管理parent/child 关系,ADO同样也对data-shaping engine进行封装. 总的说来, data shaping ADO .NET 关系是一回事.就设计方面来说,二者几乎没有共同点. Shaped recordsetsct嵌入列表对象中包括了所有数据表信息。ADO.NET关系是动态链接,你可以在两个数据表间随时建立. ADO依靠于Shaping OLE DB service 提供程序,并使用专门的SQL类语言特征以在执行单个ADO命令的过程中生成一个分层的recordset.

  

    在 ADO.NET 中,关系中涉及的每个对象总是被看成单独的个体。关系本身作为对象被公开,并且具有一定的行为规则。例如,DataRelation 对象可以从父行到子行一层层进行更改。您可以通过将 ForeignKeyConstraint 对象添加到 DataTable Constraints 集合中来进行此操作。ForeignKeyConstraint 对象表示当删除或更新数值和行时,对通过外键关系相关联的一组列的约束。如前面提到的,一旦设置好了关系,在它按程序预设终止之前,您不能进行可能破坏该关系的更改。

  

    正如早先提到的一样,一旦设置了relationship,除非它是程序性的终止,你不能够对它进行修改,那样会使它突然中断.

  

    另外, relations没有递延性.你可以在Customers Orders之间,Orders Products之间设置两个不同的关系.但是,当为了某个customer而对orders导航时,你不能够从一个order跳到相关的products.解决方法是,你必须另外打开Orders/Products 关系,锁定你需要的order,然后获取相关的行.

  

    程序员需要在ASP Session 对中存储记录吗?通过ADO .NET DataSet 对象,你可以非常安全的进行工作,而不会引起在"Storing an ADO Recordset in GIT Might Cause An Access Violation"中所论及的麻烦.

本文作者:李彬|libin2722@sohu.com 来源:本站原创
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读