ADO.Net与ADO在数据内存中的差异讨论

ado|数据

  数据的内存中表示形式

  在 ADO 中,数据的内存中表示形式为记录集。在 ADO.NET 中,它为数据集。它们之间有重要的差异。

  表的个数

  记录集看起来像单个表。如果记录集将包含来自多个数据库表的数据,则它必须使用 JOIN 查询,将来自各个数据库表的数据组合到单个结果表中。

  相反,数据集是一个或多个表的集合。数据集内的表称为数据表;明确地说,它们是 DataTable 对象。如果数据集包含来自多个数据库表的数据,它通常将包含多个 DataTable 对象。即,每个 DataTable 对象通常对应于单个数据库表或视图。这样,数据集可以模仿基础数据库的结构。

  数据集通常还包含关系。数据集内的关系类似于数据库中的外键关系,即它使多个表中的行彼此关联。例如,如果数据集包含一个有关投资者的表和另一个有关每个投资者的股票购买情况的表,则数据集可能还包含一个关系来连接投资者表的各个行和购买表的对应行。

  由于数据集可以保存多个独立的表并维护有关表之间关系的信息,因此它可以保存比记录集丰富得多的数据结构,包括自关联的表和具有多对多关系的表。

  数据导航和游标

  在 ADO 中,您使用 ADO MoveNext 方法顺序扫描记录集的行。在 ADO.NET 中,行表示为集合,因此您可以像依次通过任何集合那样依次通过表,或通过序号索引或主键索引访问特定行。DataRelation 对象维护有关主记录和详细资料记录的信息,并提供方法使您可以获取与正在操作的记录相关的记录。例如,从 Investor 表的“Nate Sun”的行开始,可以定位到 Purchase 表中描述其购买情况的那组行。

  “游标”是数据库元素,它控制记录导航、更新数据的能力和其他用户对数据库所做更改的可见性。ADO.NET 不具有固有的游标对象,而是包含提供传统游标功能的数据类。例如,在 ADO.NET DataReader 对象中提供只进、只读游标的功能。有关游标功能的更多信息,请参见数据访问技术。

  将打开连接的时间降至最低

  在 ADO.NET 中,打开连接的时间仅足够执行数据库操作,例如“选择”(Select) 或“更新”(Update)。您可以将行读入数据集中,然后在不保持与数据源的连接的情况下使用它们。在 ADO 中,记录集可以提供不连接的访问,但 ADO 主要是为连接的访问设计的。

  ADO 和 ADO.NET 中的不连接处理之间存在一个显著差异。在 ADO 中,通过调用 OLE DB 提供程序来与数据库通信。但在 ADO.NET 中,您通过数据适配器(OleDbDataAdapter、SqlDataAdapter、OdbcDataAdapter 或 OracleDataAdapter 对象)与数据库通信,这将调用 OLE DB 提供程序或基础数据源提供的 API。ADO 和 ADO.NET 之间的主要区别在于:在 ADO.NET 中,数据适配器允许您控制将对数据集所做的更改传输到数据库的方式,方法是实现性能优化、执行数据验证检查或添加其他任何额外处理。

  注意   数据适配器、数据连接、数据命令和数据读取器是组成 .NET Framework 数据提供程序的组件。Microsoft 和第三方供应商可能会提供其它提供程序,这些提供程序也可集成到 Visual Studio 中。有关不同 .NET 数据提供程序的信息,请参见 .NET 数据提供程序。

  在应用程序间共享数据

  在应用程序间传输 ADO.NET 数据集比传输 ADO 不连接的记录集要容易得多。若要将 ADO 不连接的记录集从一个组件传输到另一个组件,请使用 COM 封送。若要在 ADO.NET 中传输数据,请使用数据集,它可以传输 XML 流。

  相对于 COM 封送,XML 文件的传输提供以下便利之处:

  更丰富的数据类型

  COM 封送提供一组有限的数据类型(由 COM 标准定义的那些类型)。由于 ADO.NET 中的数据集传输基于 XML 格式,所以对数据类型没有限制。因此,共享数据集的组件可以使用这些组件一般会使用的任何丰富的数据类型集。

  性能

  传输大型 ADO 记录集或大型 ADO.NET 数据集会使用网络资源;随着数据量的增长,施加于网络的压力也在增加。ADO 和 ADO.NET 都使您可以最大限度地降低所传输的数据。但 ADO.NET 还提供另一个性能优势:ADO.NET 不需要数据类型转换。而需要 COM 封送来在组件间传输记录集的 ADO,则需要将 ADO 数据类型转换为 COM 数据类型。

  穿透防火墙

  防火墙可以影响试图传输不连接的 ADO 记录集的两个组件。请记住,防火墙通常配置为允许 HTML 文本通过,但防止系统级请求(如 COM 封送)通过。

  因为组件使用 XML 交换 ADO.NET 数据库,所以防火墙可以允许数据集通过。

时间: 2024-09-27 10:11:46

ADO.Net与ADO在数据内存中的差异讨论的相关文章

使用vb.net,用ADO.NET,如何向Access数据表中删除一条记录?

问题描述 使用vb.net,用ADO.NET,如何向Access数据表中删除一条记录?谢谢 解决方案 解决方案二:deletefrom[表名]where[主关键字]=你要删的主关键字.解决方案三:deletefrom表where主键解决方案四:DimconAsNewSystem.Data.OleDb.OleDbConnectioncon.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;datasource=数据库文件;userid=;pass

EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

原文:EF如何操作内存中的数据以及加载相关联表的数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过ObjectContext来操作数据库的,一看是Object打头的,自然相当庞大,方法也比较多.到了经典的4.1版本,EF小组推出了一些更简单好用的API,就是DbContext,它包括更常用的方法.看看EF小组是怎么说

使用 ADO.NET 解锁 Microsoft Access 数据(2)

access|ado|数据 使用 DataReader 对象以仅向前移动的.只读的格式访问数据很多时候,您只是希望简单地浏览数据,而并不需要在数据间来回浏览,也不需要更改数据(我们将此称为"流水数据").ADO.NET 的 DataReader 对象是专门为此设计的.下面是我编写的一段示例代码,可以逐个读取连接的数据库中的所有选定数据: ' Visual Basic .NET 代码.' 控制台应用程序.' 引用:'   System'   System.Data'   System.X

使用 ADO.NET 解锁 Microsoft Access 数据(1)

access|ado|数据 使用 ADO.NET 解锁 Microsoft Access 数据 Paul CornellMicrosoft Corporation 2001 年 12 月 6 日 Microsoft Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO).ActiveX 数据对象 (ADO).Microsoft Word 邮件合并.Microsoft Excel Web 查询.Microsoft Query.数据访问页.Microsoft Access

使用ADO.NET解锁 Microsoft Access数据(二)

access|ado|数据 数据表单向导 Visual Studio .NET 数据表单向导允许您快速连接到数据库,并生成简单的用户界面,用于显示数据并与数据进行交互.要使用数据表单向导,请执行以下步骤: 在 Windows 应用程序项目中,在 Project(项目)菜单上,单击 Add Windows Form(添加 Windows 窗体). 在 Templates(模板)窗格中,单击 Data Form Wizard(数据窗体向导),单击 Open(打开),然后单击 Next(下一步). 在

使用ADO.NET解锁 Microsoft Access数据(一)

access|ado|数据 使用ADO.NET解锁 Microsoft Access数据 作者:微软中国   Microsoft Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO).ActiveX 数据对象 (ADO).Microsoft Word 邮件合并.Microsoft Excel Web 查询.Microsoft Query.数据访问页.Microsoft Access 数据项目.Office 数据连接.Office 数据链接等等.而 Microsoft

通过ado.net查询出来的数据保存到datatable后,数据类型变了,如何破?

问题描述 使用ddtek.oracle,就是普通的从oracle数据库中提取数据,oracle中的数据类型都是整形,sql语句也是普通的加减乘除,但是最后保存到datatable中,有些数据类型变成了string类型,或者应该整形的却变成了浮点型,这是为什么?有人碰到过吗? 解决方案 解决方案二:这可能跟查询语句有关,但是我用sum(x)/sum(y),x和y都是整形,这样最后出来的数据类型是string类型,这让人没有办法接受啊.之所以纠结数据类型的问题,是因为后续还需要用datatable中

mysql cluster存储引擎NDB,如何设置哪些数据不被LOAD到内存中?

问题描述 mysql cluster存储引擎NDB,如何设置哪些数据不被LOAD到内存中? mysql cluster存储引擎NDB,如何设置哪些数据不被LOAD到内存中?

linux c语言刷新cpu cache后,如果判断数据真正从cache拷贝到内存中了?

问题描述 linux c语言刷新cpu cache后,如果判断数据真正从cache拷贝到内存中了? linux c语言刷新cpu cache后,如果判断数据真正从cache拷贝到内存中了? 解决方案 用secureCRT看打印信息啊