ADO.NET的结构——ADO.NET学习&应用笔记之一

本文介绍了ADO.NET的核心组件,包括Data Provider模块和DataSet模块。Data Provider实现数据连接、操作和快速只读访问,.NET Framework提供了四组数据提供程序及四个核心对象;DataSet实现独立于数据源的数据访问,包含DataTableCollection、DataRelationCollection和ExtendedProperties三组集合,DataAdapter是其与数据源连接的桥梁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ADO.NET的核心组件由Data Provider模块和DataSet模块组成。Data Provider程序库实现数据的连接、操作和对数据快速只进只读访问。DataSet实现独立于数据源的数据访问、操作,有点类似于ADO的断开连接的静态数据集。

ADO.NET的结构图如下:


一、.NET Framework Data Provider
.NET Framework数据提供程序是一组连接数据源,并且能够对数据执行命令,获取数据的程序结构。

(一).NET Framework的四个数据提供程序
.NET Framework提供了四组数据提供程序,用于访问四类数据源。
1、SQL Server .NET Framework数据提供程序,该程序只能访问MS SQL Server7.0或更高版本,更早版本的只能通过OLE DB数据提供程序访问。它的命名空间为System.Data.SqlClient。
2、OLE DB .NET Framework 数据提供程序,用于访问OLE DB数据提供程序,该程序不支持OLE DB 2.5版接口。它的命名空间为System.Data.OleDb。
3、ODBC .NET Framework 数据提供程序。用于访问ODBC数据提供程序。它的命名空间为System.Data.Odbc。
4、Oracle .NET Framework 数据提供程序。用于访问Oracle数据,该程序需要Oracle客户端软件8.1.7或更高版本的支持。它的命名空间为System.Data.OracleClient。

通过对IDbConnection接口、IDbCommand接口、IDataAdapter接口、IDbDataAdapter接口、IDataReader接口、IDataParameter接口、IDbTransaction接口等的实现我们也可以编写自己的数据提供程序组。


(二).Net数据提供程序的四个核心对象
.Net数据提供程序通常包含有四个核心对象:
1、Connection 对象提供与数据源的连接。数据提供程序的Connection类是继承System.Data.IDbConnection接口的实现。
2、Command对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。数据提供程序的Command类是继承System.Data.IDbCommand接口的实现。
3、DataReader 从数据源中提供高性能的数据流。DataReader的数据流是只进且只读的。数据提供程序的DataReader类是继承System.Data.IDataReader接口的实现。
4、DataAdapter 提供连接DataSet对象和数据源的桥梁。DataAdapter 使用Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet中数据的更改与数据源保持一致。数据提供程序的DataAdapter类是继承System.Data.IDbDataAdapter接口的实现。
.Net数据提供程序还包括Transaction对象、Parameter对象等。


二、.NET Framework DataSet
连接、命令、事务、数据读取作用于特定的提供程序,唯有数据集可以独立于特定的数据提供的,在.NET Framework中数据集对象DataSet的命名空间位于System.Data中。

(一)、DataSet对象模型
DataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。DataSet是数据的内存驻留表示形式,无论数据源是什么,它都会提供一致的关系编程模型。你可以把它想象成一个浓缩在内存当中的关系数据库。它的对象模型如下图:

DataSet包含三组集合:
(1)、DataTableCollection。关系数据库当中最主要的对象就是Table,那么在DataSet当中使用该集合来包含多个DataTable对象。DataTable就是是在内存中的数据表,你可以通过唯一名称来标识一个表。DataSet的DataTable可存储的最大行数是16,777,216。
(2)、DataRelationCollection。在关系数据库当中除了表之外,还有表示表和表之间的关系Relation。该集合就是包含表关系对象的集合。
(3)、ExtendedProperties。该是一组自定义信息,概念上点类似于ASP的Session之类的。


(二)、DataSet与DataAdapter
DataAdapter对象是数据提供程序和DataSet连接的桥梁。数据提供程序的DataAdapter类是IDataAdapter或者IDbDataAdapter的实现。通常DataAdapter的构造函数是:
XxxDataAdapter(SqlCommand selectCommand)
XxxDataAdapter(String selectCommandText, String selectConnectionString)
XxxDataAdapter(String selectCommandText, SqlConnection selectConnection)

DataAdapter通过实现Fill、FillSchema将数据源数据、架构等添加到DataSet中,通过实现Update将DataSet中的数据更新到数据源中。

 

相关资源:
1、.NET Framework SDK之ADO.NET概述
2、《类似数据库的数据容器(深入研究数据访问)》 Dino Esposito
http://www.microsoft.com/china/MSDN/library/data/dataAccess/Database-like%20Data%20Containers.mspx
3、《剖析 .NET 托管提供程序》 Dino Esposito
http://www.microsoft.com/china/MSDN/library/data/dataAccess/Inside.NETManagedProviders.mspx
4、MSDN数据访问专栏
http://www.microsoft.com/library/mnp/2/aspx/framesmenu.aspx?url=/china/MSDN/library/data/default.mspx

### ADO.NET 学习笔记及相关教程 #### 关于 ADO.NET 的基本概念 ADO.NET.NET Framework 中用于访问和操作数据的核心技术之一。它提供了两种主要的组件来实现这一目标:.NET Framework 数据提供程序以及 DataSet[^1]。 - **.NET Framework 数据提供程序** 它是一组类,专门设计用来连接到特定的数据源(如 SQL ServerOracle 或 Access)、执行命令并检索结果集。这些类通常包括 `Connection`、`Command` 和 `DataAdapter` 等对象。 - **DataSet** 提供了一种断开模式的数据存储方式,允许应用程序在内存中保存来自不同数据源的数据,并支持离线编辑和更新功能。 #### 数据库连接与操作基础 为了能够通过 ADO.NET数据库进行读写操作,首先需要掌握如何构建正确的连接字符串。这方面的具体指导可以在相关文章中找到,例如《ADO.NET 操作 ACCESS 数据库——数据库连接字符串》[^2]。该文档详细介绍了针对不同的数据库环境配置合适的连接参数的方法。 #### 使用事务管理复杂业务逻辑 当涉及到多步操作时,确保数据一致性至关重要。为此,ADO.NET 支持利用事务机制完成批量处理任务。如果某个环节失败,则整个过程会被回滚至初始状态,从而保障系统的稳定性和可靠性[^3]。 以下是基于上述理论的一个简单示例代码片段展示如何运用 ADO.NET 执行带事务控制的基本 CRUD 功能: ```csharp using System; using System.Data; using System.Data.SqlClient; class Program { static void Main() { string connectionString = "YourConnectionStringHere"; using(SqlConnection conn = new SqlConnection(connectionString)) { SqlTransaction transaction = null; try{ conn.Open(); // 开始新事物 transaction = conn.BeginTransaction(); SqlCommand command = new SqlCommand("INSERT INTO TestTable (ColumnA, ColumnB) VALUES ('ValueA', 'ValueB')", conn); command.Transaction = transaction; int rowsAffectedInsert = command.ExecuteNonQuery(); SqlCommand updateCmd = new SqlCommand("UPDATE AnotherTable SET FieldX='NewData' WHERE Condition=true", conn); updateCmd.Transaction = transaction; int rowsAffectedUpdate = updateCmd.ExecuteNonQuery(); // 如果一切正常则提交 transaction.Commit(); } catch(Exception ex){ Console.WriteLine($"An error occurred: {ex.Message}"); if(transaction !=null){ transaction.Rollback(); // 出现异常就回滚 } } } } } ``` 此段 C# 编写的脚本演示了怎样创建一个安全可靠的交易流程,在其中包含了插入记录与修改现有字段两项动作。只有两者都顺利完成才会真正生效;反之任何一个步骤出现问题都将触发自动撤销更改的动作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值