c#

位置:IT落伍者 >> c# >> 浏览文章

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


发布日期:2021年04月20日
 
ADO.Net与ADO在数据内存中的差异讨论

数据的内存中表示形式

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

表的个数

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

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

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

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

数据导航和游标

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

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

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

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

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

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

在应用程序间共享数据

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

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

更丰富的数据类型

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

性能

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

穿透防火墙

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

因为组件使用 XML 交换 ADONET 数据库所以防火墙可以允许数据集通过

上一篇:使用ASP .NET C#生PDF

下一篇:利用 .NET Framework 命令行工具