从 ADO 迁移到 ADO.NET(一)
2006-07-23 11:17:26 来源:WEB开发网string sSql = "SELECT COUNT(*) As iRowCount FROM Orders";
另外一种获取单值的方法是使用存储过程的输出参数。该技术也需要检索大量的值。在 ADO 和 ADO.NET 中均可采用,不同的是 ADO.NET 扩充了输出参数的功能。为了在 ADO.NET 中从一个命令对象中得到输出参数的值,使用 ExecuteNonQuery 方法执行查询语句。该方法告诉 ADO.NET,该查询不返回行集,因而可以避免产生 DataSet 或 DataReader 的 开销:
SqlCommand oCmd = new SqlCommand(sSql, oCn);
oCmd.CommandType = CommandType.Text;
int iCount = (int)oCmd.ExecuteScalar();
oCmd.ExecuteNonQuery();
oCmd.UpdatedRowSource = UpdateRowSource.OutputParameters;
int iOrderID = (int)oCmd.Parameters["@OrderID"].Value;
上述代码设置 UpdatedRowSource 属性以指向输出参数,前提是输出参数已被设置。然后就可以检索到输出的值。在传统的 ADO 中 ,Connection 对象的 Execute 方法使用一个模糊的参数来完成以上任务,而 ADO.NET 是以一种直白的方式来实现的。当然,在 ADO.NET 中还有一种最佳的方法来返回一个标准的行集——即命令对象的 Execute 方法。
传统的 ADO 的 Recordset 对象能运用 UPDATE、INSERT、DELETE 等语句,这些语句对于用 Recordset 变化后的值修改底层数据库来说是必须的。尽管该功能很方便,但也还是带来许多开销,因为它必须返回到数据库去了解如何进行该操作。
ADO.NET 中通过 CommandBuilder 对象做到这一点;虽然它同样带来系统开销。在大多数开发情况下,具体的 SELECT、INSERT、UPDATE、DELETE 操作在设计时间就可以确定下来。在传统的 ADO 中,没有 一种方便的方法将查询行为与 Recordset 关联起来以便 Recordset 可以利用这些它们的优势。而在 ADO.NET 中,一个 DataAdapter 有四个不同的命令对象与之相关联,分别代表每个查询 动作和 SELECT 语句。这使得 DataAdapter 可以使用一个查询结果去填充一个 DataSet,并告诉DataAdapter 事先在数据库上采取哪些 查询动作。当然在设计阶段这需要更多的代码,不过这些额外的代码对于性能的提高是值得的,更不用说代码的易维护性了,因为这些代码是自解释的。 在我五月份的“Data Point”专栏里详细讨论了 DataAdapter 的使用方法。
本文中我讨论了从 ADO 到 ADO.NET 一些关键特性的演变,包括 firehost 游标和持续化 XML。在后续专栏里,我将探讨更多有关游标的演变并示范如何处理并发问题以及在传统 ADO 和 ADO.NET 中如何进行批量更新。
- ››Adobe推出用于iOS设备创建PDF文件的应用
- ››Adobe发布Acrobat X 不支持苹果iOS系统
- ››Adobe公司展示plenoptic lenses技术
- ››迁移DHCP服务器
- ››迁移集群环境中的 WebSphere Commerce
- ››Adobe:移动版Flash实测性能高于HTML5视频
- ››Adobe更新Web版Photoshop 无需注册即可使用
- ››Adobe Flash 10.1被曝支持Android效果不佳
- ››Adobe Flash 10.1 for Android 版本被曝工作状况不...
- ››Adobe CEO:不担心iPhone和iPad封Flash技术
- ››Adobe为iPad、Android平台发布免费Photoshop
- ››Adobe发布Android版Flash 10.1 Beta 3
更多精彩
赞助商链接