转换现有代码
大量的ASP页面使用ADO对象来抽取数据让我们一起来回顾下几例典型的案例对你在以后处理移植或者改写代码时也许会有帮助
如果你有从单个recordset生成报表的ASP页面那么DataReader会是你的好帮手
String strConn strCmd;
strConn = DATABASE=MyAgenda;SERVER=localhost;UID=sa;PWD=;;
strCmd = Select * From Names where ID= + contactIDText;
SQLConnection oCN = new SQLConnection(strConn);
SQLCommand oCMD = new SQLCommand(strCmd oCN);
oCNOpen();
SQLDataReader dr;
oCMDExecute(out dr);
while (drRead()) {
// Use drGetString(index) or
// dr[field name] to ResponseWrite data
}
你可以利用HasMoreRows属性来快速检查是否DataReader为空如果你仅仅只简单处理一系列记录没有什么比DataReader更快更好的对象了它同样适用于查询单个记录
DataReader的内容是不可编辑的但你可以将内容移动到更具管理功能的对象里如
DataTable或是一个或多个DataRow 对象
当你需要处理表与记录二者之间的复杂关系时DataReader就不是合适的工具了数据模型链接越多SQL命令则会越复杂导航模块保有连续性最后放入缓存的数据往往多于你所需要的 DataSet 和 DataRelation objects是这种表关系模型的基础
为管理parent/child 关系ADO同样也对datashaping engine进行封装 总的说来 data shaping 和 ADO NET 关系是一回事就设计方面来说二者几乎没有共同点 Shaped recordsetsct嵌入列表对象中包括了所有数据表信息ADONET关系是动态链接你可以在两个数据表间随时建立 ADO依靠于Shaping OLE DB service 提供程序并使用专门的SQL类语言特征以在执行单个ADO命令的过程中生成一个分层的recordset
在 ADONET 中关系中涉及的每个对象总是被看成单独的个体关系本身作为对象被公开并且具有一定的行为规则例如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中所论及的麻烦