1 ADO.NET结构
1.1 相关的名字空间
1.1.1 System.Data 这是最主要的数据相关名字空间,其下包括两个相关名字空间
l System.Data.OleDB
l System.Data.SqlClient
1.1.2 .NET数据提供者
它允许你连接到数据源, 对数据源执行一组命令, 并根据命令获取结果.
1.1.3 .NET架构中有两个.NET数据提供者
OLE DB .NET数据提供者能连接到OLEDB数据源
SQL SERVER .NET数据提供者能连接到SQL SERVER
1.1.4 System.Data.OleDB
包含OLEDB .NET数据提供者所使用的类. 这些类以OleDB开头
1.1.5 System.Data.SqlClient
包含SQL SERVER数据提供者使用的类, 以SQL开头
2 ADO.NET组件
ADO.NET提供两个主要的组件: 数据集和.NET数据提供者
2.1 数据集
ADO.NET的数据集支持断开连接方式的分布式数据方案
数据集是一个集合,包含了来自一个数据源的一个或多个表或者记录, 以及其间的关系的信息. DataSet是ADONET的核心, 是数据在内存中的副本.
数据集包含了表, 行, 列, 约束, 以及表间的关系.它可以有多个表,用关系将表进行连接
可以在DataSet中创建数据的DataView.再用DataView特性将控件绑定到DataSet中的值.(指定控件从哪个DataTable获得数据-DataTable的DataView);
DataSet使用XML传输数据
DataSet类表示ADO.NET的数据集, 存储在System.Data名字空间
数据集中的对象列表
对象 | 描述 |
DataSet | 表示内存中的虚拟的, 本地的关系数据库,用于临时存储数据 |
DataTable | 表示数据集中数据位于内存的表. 该对象以行和列的形式包含了数据 |
DataRow | 表示包含了DataTable对象中的数据的一行 |
DataColumn | 表示DataTable对象中的一个列模式 |
DataRelation | 表示两个DataTable对象之间存在的关系 |
Constraint | 表示对一个或多个DataColumn对象的约束 |
2.2 .NET数据提供者
数据提供者是担当应用程序和数据源之间的桥的角色, 用来与数据源建立连接, 执行一组命令, 以及获取结果, 取得结果并处理之后, 需要再次使用提供者在数据源中更新修改
2.2.1 .NET数据提供者的四个核心组件
l Connection对象
用于连接到数据库. 建立并管理数据库的连接.
用Connnection对象上的Open方法打开它或在用DataAdapter时隐式使用它
l Command对象
Command对象通过Connection对象传递参数并对数据存储执行命令,再将数据返回到DataReader或DataSet
l DataReader对象
DataReader对象从数据库读取只读/只向前的数据流,并与Command和Connection对象联合使用.
在任意给定的时间点, DataReader只允许将一行数据存储在内存中. 这有利于减少系统开销,它比用DataSet的速度快.
不过要注意在使用时保持到数据存储的连接处于活动状态,并要求你必须在结束时关闭DataReader对象
l DataAdapter对象
DataAdapter用于与填充DataSet的数据库通信.它配合Connection和Command对象从数据存储中检索数据; DataAdapter也能将内存DataSet中的本地修改后数据存回其基本数据存储.
如何将所作的修改存回到数据存储中,这时应该使用DataAdapter
这时的DataAdapter如何工作?(这里要求不要调用DataSet的AcceptChanges方法)
基本流程:
ü 指定DataAdapter的SelectCommand/InsertCommand/UpdataCommand和DeleteCommand
ü 使用DataAdapter从数据库检索数据,并填充DataSet
ü 允许用户或系统对DataSet进行修改
ü 调用GetChanges方法只使用已更新的基本数据存储中的已修改过的值来填充DataSet(或者说,该方法的可选参数RowState,不指定,就会返回所有改过的行)
ü 调用DataAdapter的Update方法,并在参数中传递包含修改值的DataSet
n 对于插入操作,会用InsertCommand属性值
n 对于更新,会用UpdateCommand属性值
n 对于删除,会用DeleteCommand属性值
实际情况是ADONET会根据需要自动调用适当的命令
注意: DataAdapter不仅可以在数据集和数据库间传输数据
也可以在数据集和其他一些数据源, 比如Microsoft Exchange SERVER, 之间传输
2.2.2 .NET数据提供者的类型
有两种:
l OLE DB
允许通过COM的互操作性进行数据访问
它可以使用几种OLEDB提供者, 例如
n SQLOLEDB
n MSDAORA
n Microsoft.Jet.OLEDB.4.0
但它不支持MSDASQL, 因为这个是面向ODBC的
2.2.2.1.1 OLEDB.NET数据提供者类(存储在System.Data.OleDB名字空间)
类 | 描述 |
OleDbConnection | 表示到数据源的打开连接 |
OleDbCommand | 表示可以对数据源执行的SQL语句或存储过程 |
OleDbDataReader | 提供了一种方法, 可以用只向前的模型从数据源读取数据 |
OleDbDataAdapter | 表示数据命令和数据库连接, 可以用来将数据在数据源和数据集之间双向传递 |
OleDbError | 对应于数据源所返回的错误或警告的编译信息 |
OleDbException | 表示当OLEDB数据源返回错误或警告是所引发的异常 |
OleDbPermission | 允许OLEDB提供者验证用户是否拥有足够的安全性权限, 来获取数据源的访问权限 |
OleDbTransaction | 表示数据源的SQL事务 |
l SQL SERVER
它是专门针对Microsoft SQL SERVER的, 为实现这一点, 它使用了TDS(表格式数据库)协议
2.2.2.1.2 SQL SERVER .NET数据提供者类(存储在System.Data.SqlClient名字空间)
类 | 描述 |
SqlConnection | 表示到数据源的打开连接 |
SqlCommand | 表示可以对SQL SERVER执行事务SQL语句或存储过程 |
SqlDataReader | 提供一种方法, 用只向前模型读取数据 |
SqlDataAdapter | 表示数据命令,在SQLSERVER数据库和数据集之间传递数据 |
SQLError |
|
SQLException |
|
SqlTransaction | 事务 |
3 ADO.NET和XML
ADO.NET内置XML支持
ADO.NET只提供了显示和隐式XML支持
ADO.NET使用XML作为存储和传输数据的内部格式
这样有两个有点:
l 有利于不同应用程序交换数据
l 数据可以通过不同的协议和防火墙
XML以数据集的形式与ADO.NET集成在一起
l 可以用xml将数据从数据源传到数据集
l 或从数据集传送到组件
l 数据集也可以访问xml文件中的数据