WEB开发网
开发学院软件开发VC 从 ADO 迁移到 ADO.NET(一) 阅读

从 ADO 迁移到 ADO.NET(一)

 2006-07-23 11:17:26 来源:WEB开发网   
核心提示: string sSql = "SELECT COUNT(*) As iRowCount FROM Orders";SqlCommand oCmd = new SqlCommand(sSql, oCn);oCmd.CommandType = CommandType.Tex

string sSql = "SELECT COUNT(*) As iRowCount FROM Orders";
SqlCommand oCmd = new SqlCommand(sSql, oCn);
oCmd.CommandType = CommandType.Text;
int iCount = (int)oCmd.ExecuteScalar();
  另外一种获取单值的方法是使用存储过程的输出参数。该技术也需要检索大量的值。在 ADO 和 ADO.NET 中均可采用,不同的是 ADO.NET 扩充了输出参数的功能。为了在 ADO.NET 中从一个命令对象中得到输出参数的值,使用 ExecuteNonQuery 方法执行查询语句。该方法告诉 ADO.NET,该查询不返回行集,因而可以避免产生 DataSet 或 DataReader 的 开销:

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 中如何进行批量更新。

上一页  1 2 3 4 5 6 

Tags:ADO 迁移 ADO

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接