ADO.NET用于访问和操作数据的两个主要组件时.NET Framework数据提供程序和DataSet
.NET Framework数据提供程序
.NET Framework数据提供程序是专门为数据操作以及快速,只进,只读访问数据而设计的组件.
Connection对象提供到数据源连接.
使用Command对象可以访问用于返回数据,修改数据,运行存储过程以及发送或检索参数信息的数据库命令
DataReader可从数据源提供高性能的数据源.
DataAdapter在DataSet对象和数据源之间起桥梁作用
DataAdapter使用Command对象在数据源中执行SQL命令以向DataSet中加载数据,并将对DataSet中数据的更改协调回数据源
DataSet
ADO.NET DataSet是专门独立于任何数据源的数据访问而设计的.因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据.DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及有关DataTable对象中数据的主键,外键,约束和关系信息组成.
如下图
使用DataSet可执行以下操作:
通过DataReader以只进,只读方式返回数据,从而提高应用程序的性能;
.NET Framework中包含的数据提供程序
.NET Framework数据提供程序 | 说明 |
用于SQL Server的.NET Framework数据访问接口 | 提供Microsoft SQL Server的数据访问.使用 System.Data.SqlClient命名空间 |
用于OLE DB的.NET Framework数据提供程序 | 提供对使用OLE DB公开的数据源中数据的访问.使用System.Data.OleDb命名空间 |
用于ODBC的.NET Framework数据提供程序 | 提供对ODBC公开的数据源中数据的访问.使用System.Data.Odbc命名空间 |
用于Oracle的.NET Framework数据提供程序 | 适用于Oracle数据源.用于Oracle的.NET Framework数据提供程序支持Oracle客户端软件8.1.7和更高版本,并使用System.Data.OracleClient命名空间 |
EntityClient提供程序 | 提供对实体数据模式(EDM)应用程序的数据访问.使用System.Data.EntityClient命名空间 |
用于SQL Server Compact4.0的.NET Framework数据提供程序 | 提供Microsoft SQL Server Compact 4.0的数据访问.使用System.Data.SqlServerCe命名空间 |
.NET Framework数据提供程序的四个核心对象
对象 | 说明 |
Connection | 建立与特定数据源的连接.所有Connection对象的基类均为DbConnection类 |
Command | 对数据源执行命令.公开Parameters,并可在Transaction范围内从Connection执行.所有Command对象的基类均为DbCommand类 |
DataReader | 从数据源中读取只进且只读的数据流.所有DataReader对象的基类均为DbDataReader类 |
DataAdapter | 使用数据源填充DataSet并解决更新.所有DataAdapter对象的基类均为DbDataAdapter类 |
对象 | 说明 |
Transaction | 将命令登记在数据源处的事务中。 所有 Transaction 对象的基类均为 DbTransaction 类。 ADO.NET 还使用 System.Transactions 命名空间中的类提供对事务的支持。 |
CommandBuilder | 一个帮助器对象,它自动生成 DataAdapter 的命令属性或从存储过程中派生参数信息,并填充 Parameters 对象的 Command 集合。 所有 CommandBuilder 对象的基类均为 DbCommandBuilder 类。 |
ConnectionStringBuilder | 一个帮助器对象,它提供一种用于创建和管理由 Connection 对象使用的连接字符串的内容的简单方法。 所有 ConnectionStringBuilder 对象的基类均为 DbConnectionStringBuilder 类。 |
Parameter | 定义命令和存储过程的输入、输出和返回值参数。 所有 Parameter 对象的基类均为 DbParameter 类。 |
Exception | 在数据源中遇到错误时返回。 对于在客户端上遇到的错误,.NET Framework 数据提供程序将引发 .NET Framework 异常。 所有 Exception 对象的基类均为 DbException 类。 |
Error | 公开数据源返回的警告或错误中的信息。 |
ClientPermission | 为 .NET Framework 数据提供程序代码访问安全属性而提供。 所有 ClientPermission 对象的基类均为 DBDataPermission 类。 |
下表显示了推断的 .NET Framework 类型、DbType 和 SqlDbType 枚举以及 SqlDataReader 的访问器方法。
SQL Server 数据库引擎类型 | .NET Framework 类型 | SqlDbType 枚举 | SqlDataReader SqlTypes 类型化访问器 | DbType 枚举 | SqlDataReader DbType 类型化访问器 |
bigint | Int64 | ||||
binary | Byte[] | ||||
bit | 布尔 | ||||
char | String | ||||
date 1 | DateTime | ||||
datetime | DateTime | ||||
datetime2 | DateTime | 无 | |||
datetimeoffset | DateTimeOffset | 无 | |||
Decimal | 小数 | ||||
FILESTREAM attribute (varbinary(max)) | Byte[] | ||||
FLOAT | Double | ||||
image | Byte[] | ||||
int | Int32 | ||||
money | 小数 | ||||
nchar | String | ||||
ntext | String | ||||
numeric | 小数 | ||||
nvarchar | String | ||||
real | Single | ||||
rowversion | Byte[] | ||||
smalldatetime | DateTime | ||||
smallint | Int16 | ||||
smallmoney | 小数 | ||||
sql_variant | Object 2 | ||||
text | String | ||||
time | TimeSpan | 无 | |||
timestamp | Byte[] | ||||
tinyint | Byte | ||||
uniqueidentifier | Guid | ||||
varbinary | Byte[] | ||||
varchar | String | ||||
xml | Xml | 无 |
连接事件:InfoMessage与StateChange
事件 | 描述 |
InfoMessage | 当从数据源中返回消息性消息时发生.消息性信息时数据源中不会引发异常的消息 |
StateChange | 当Connection的状态更改时发生 |
连接池
连接到数据源可能需要很长时间,为了最大程度的降低打开连接的成本,ADO.NET使用一种称为”连接池”的优化技术,这种技术可最大程度的降低重复打开和关闭连接所造成的成本;
清除池
ADO.NET 2.0引用了两种新方法来清除池:ClearAllPools和ClearPool.ClearAllPools清除指定程序的连接池,ClearPool清除与特定连接关联的连接池.如果在调用时连接正在使用,将对它们进行相应的标记,连接关闭时,将被丢弃,而不是返回池中;
CommandType枚举 规定CommandText属性的方式
CommandType | 描述 |
Text | 定义要在数据源处执行的语句的SQL命令 |
StoredProcedure | 存储过程的名称.可以使用某一命令的Parameters属性访问输入和输出参数,并返回值(无论调用哪种Execute方法).当使用ExecuteReader时,在关闭DataReader后才能访问返回值和输出参数 |
TableDirect | 表的名称 |