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 的 Constr
aints 集合中来进行此操作。ForeignKeyConstraint 对象表示当删除或更新数值和行时
,对通过外键关系相关联的一组列的约束。如前面提到的,一旦设置好了关系,在它按
程序预设终止之前,您不能进行可能破坏该关系的更改。
    正如早先提到的一样,一旦设置了relationship,除非它是程序性的终止,你不能够
对它进行修改,那样会使它突然中断.
    另外, relations没有递延性.你可以在Customers 和Orders之间,Orders 和 Pro
ducts之间设置两个不同的关系.但是,当为了某个customer而对orders导航时,你不能够
从一个order跳到相关的products行.解决方法是,你必须另外打开Orders/Products 关系
,锁定你需要的order,然后获取相关的行.
    程序员需要在ASP Session 对中存储记录吗?通过ADO .NET 和 DataSet 对象,你
可以非常安全的进行工作,而不会引起在"Storing an ADO Recordset in GIT Might Ca
use An Access Violation"中所论及的麻烦.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值