ADO.NET数据集经过长时间的发展,很多用户都很了解ADO.NET数据集了,这里我发表一下个人理解,和大家讨论讨论。最常见数据任务是从数据库检索数据并对数据进行某些操作:显示数据、处理数据或将数据发送给另一个组件。经常地,应用程序需要处理不止一条记录,而是一组记录:例如客户列表或今天的订单。通常应用程序所需的该组记录来自多个表:我的客户及其所有订单;所有名为“Smith”的作者及他们写的书;以及其他类似的相关记录组。
获取了这些记录后,应用程序通常将它们成组使用。例如,应用程序可以允许用户浏览名为“Smith”的所有作者,检查一个 Smith 的书,然后检查下一个 Smith 的书,等等。
在许多情况下,每次应用程序需要处理下一条记录时都返回到数据库是不切实际的。(这样做可能会失去将打开连接的需求降至最低所带来的许多好处。)因此解决方案就是临时存储从数据库检索的记录,然后使用该临时集。
这便是数据集的概念。数据集是从数据源检索的记录的缓存。它的工作方式如同虚拟的数据存储区:数据集包含一个或多个表(这些表基于实际数据库中的表),并且它可以包含有关这些表之间的关系和对表可包含数据的约束的信息。
ADO.NET数据集内的数据通常是数据库中内容的非常精简的版本。但是,可以用与操作实际数据十分类似的方式操作数据集。这样操作时,您将保持与数据库的不连接状态,使数据库可以自由执行其他任务。
当然,您经常需要更新数据库中的数据(尽管不会像从数据库检索数据那么频繁)。可以在数据集上执行更新操作,并且这些更新可以直接写到基础数据库。
#T#数据集是数据的被动容器这一点很重要。若要实际从数据库获取数据和(可选)将数据写回数据库,请使用数据适配器。数据适配器包含一个或多个数据命令,这些命令用于填充数据集中的单个表并更新数据库中的相应表。(数据适配器通常包含四条命令,分别用于选择、插入、更新和删除数据库中的行。)因此,每当调用数据适配器的 Fill 方法时,它都可能执行 SELECT au_id, au_lname, au_fname FROM authors 之类的 SQL 语句。
因为数据集实际上是数据库数据的私有副本,所以它不一定反映数据库的当前状态。如果想要查看其他用户进行的最新更改,可以通过调用适当的 Fill 方法刷新数据集。
使用数据集的一个便利之处是组件可以根据需要交换数据集。例如,中层的某个业务对象可以创建和填充一个数据集,然后将它发送给应用程序中其他位置处的另一个组件以供处理。该功能意味着组件不必分别查询数据库。