为你解析ADO.NET应用程序

在网上收集了很多有关ADO.NET的信息,整理了一些,希望对大家有所帮助。ADO.NET应用程序和基础数据源之间的交互基于一个具有双向信道的双体系结构。您可以使用各个特定于提供程序的命令或批处理更新过程来访问数据源,以读取和写入行。在这两种情况下,数据访问都会产生完全双向绑定,并涉及各种不同的对象和方法。您可以使用如 SqlCommand 和 OleDbCommand 等命令类来执行单个命令。可使用数据适配器对象来下载断开连接的数据,提交更新的行集。虽然 “数据集” 是数据适配器用于返回和提交记录块的容器对象,但各个命令通过数据读取器对象返回数据。

更新是通过各个命令、存储过程完成的,通常,托管提供程序理解的任何命令文本一般都被称为更新。更新命令总是执行嵌入在语句正文中的新数据。更新命令总是需要一个打开的连接,可能还需要一个正在进行的事务处理或一个新的事务处理。批处理更新则是一个略有不同的方法分支。从最高的抽象级别来看,您并不发出命令,无论它可能有多么复杂。取而代之的是,您提交在客户端修改的当前行的快照,并等待数据源批准。批处理更新背后的关键概念是数据断开连接的概念。您下载行表,通常为数据集,根据需要在客户端对它进行修改,然后将这些行的新映像提交到数据库服务器。您所作的是提交更改,而不是执行一个对数据源创建更改的命令。这就是更新(我在 July column 一文中讨论过这个问题)和批处理更新之间的本质区别。

下图说明了ADO.NET 应用程序的双更新体系结构。

 

图 1. ADO.NET应用程序和数据源之间的两个双向交互

在进一步详细讨论 ADO.NET 批处理更新之前,我需要阐明常常会导致某种误解的批处理更新模型的一个方面。虽然更新和批处理更新在 ADO.NET 内的实际实现方面有着本质的区别,但它们遵循的是同一个更新模型。更新和批处理更新都是通过直接的并且特定于提供程序的语句来完成的。当然,由于批处理更新通常涉及到更多的行,所以这些语句会被组合为一个批处理调用。批处理更新会对目标数据集的行进行从头到尾的循环,只要发现更新的行,就会发出适当的更新命令(INSERT、DELETE 或 UPDATE)。对更新的行进行通信时,将运行一个预定义的直接 SQL 命令。从本质上来说,这就是批处理更新。

这个过程是理所当然的。实际上,如果批处理更新使用完全不同的更新模型,就需要来自数据源的特殊支持。(这正是向 SQL Server 2000 提交 XML updategram 时发生的情况。)批处理更新只是一个用来简化多个行更新提交的客户端提供的软件机制。在任何情况下,每个新行提交总是通过数据源直接命令的正常通道完成的。

到目前为止,本文只提及了 SQL 命令,但这些提及的内容都明确表明了 ADO 批处理更新实现和 ADO.NET 批处理更新实现之间的一个重要区别。在 ADO 中,批处理更新只可能发生在基于 SQL 的数据源上。而在 ADO.NET 中,批处理更新则可能发生在任何种类的托管提供程序上,其中包括那些不应该通过 SQL 查询语言公开其数据的托管提供程序。现在,我们可以开始讨论 ADO.NET 批处理更新编程的关键内容了。

【编辑推荐】

  1. Linq匿名类型简单概述
  2. Linq随机读取数据浅析
  3. Linq Lambda表达式全面分析
  4. Linq扩展方法简单分析
  5. 初探Linq局部变量类型
THE END