1.在已连接环境中,用户可以经常连接到数据源
2.优点
更安全、更容易维护
更容易控制并发性
与非连接环境比较,数据刷新更及时
3.缺点
必须有固定的数据库连接
扩展性不好
1.在非连接环境中,用户可以在非连接的计算机上使用数据的子集,以后再将其更新到数据源
2.优点
任何时候都可用,并可随时连接到数据源进行处理
共享连接资源
提高了应用程序的性能和扩展性
3.缺点
数据不能保证是最新的
可能发生更新冲突,要想办法解决
SQL Server 数据提供程序
OLE DB 数据提供程序
ODBC 数据提供程序
Oracle 数据提供程序
1.Connection对象
表示与一个数据库的物理连接,主要负责打开、关闭、改变数据库以及管理事务
2.Command对象
表示在数据源上执行的一条SQL语句或一个存储过程
一个Connection对象可以独立的创建和执行不同的Command
3.DataReader对象
一种快速、低开销的对象,用于从数据源中获取只读的数据流
4.DataAdapter对象
Connection对象和DataSet之间的桥梁
由四个Command对象组成
1.构造连接对象
2.打开和关闭连接
构造命令对象
ExecuteNonQuery方法
执行非查询命令,例如Insert、Update、Delete
返回命令影响到的行数
ExecuteScalar方法
执行一个SQL命令,并返回结果集的第1列第1行的值
适合执行COUNT、AVG、MIN、MAX、SUM函数
该函数返回Object类型,须进行类型转换
ExecuteReader方法
返回DataReader对象
DataReader对象是一个快速、只读、只进的的数据流
DataReader对象用后应关闭,否则不能重用与之关联的连接对象和命令对象
一项事务(Transaction)就是必须作为单个工作单元来对待的一系列操作
同一事务中的操作要么全部成功,要么全部失败
ADO.NET通过Transaction对象来支持事务
Transaction对象是在打开的连接上创建的,方法是将Transaction对象的引用分配给连接对象的Transaction属性
如果事务提交,构成该事务的所有命令将会永久地写入数据源,如果事务回滚,所有的命令将从数据源取消
调用Connection对象的BeginTransaction方法创建事务
BeginTransaction()
开始事务
BeginTransaction(IsolationLevel)
在指定的隔离级别开始事务
IsolationLevel.ReadCommitted : sqlserver默认级别。
IsolationLevel.ReadUncommitted
IsolationLevel.RepeataRead
IsolationLevel.Serializable
BeginTransaction(TransactionName)
开始事务,并指定事务名称
BeginTransaction(IsolationLevel,TransactionName)
在指定的隔离级别开始事务,并指定事务名称
构造参数化的命令字符串
向Command对象的Parameters集合调用Add方法添加参数
运行时给参数赋值
数据集(DataSet)是记录在内存中的数据,类似于一个简化的关系数据库
DataSet和数据源并没有连接在一起
DataSet不知道自身所包含的数据来自哪里
DataSet 的组成
DataTableCollection
由DataTable组成,DataTable由Column集合、Row集合和Constraint集合组成
DataRelationCollection
由DataRelation组成
ADO.NET支持非类型化数据集和类型化数据集
非类型化数据集
System.Data.DataSet类的实例
类型化数据集
从System.Data.DataSet类继承而来的类的实例
两者之间的区别
类型化数据集把表和表内的列作为对象属性公开,可直接通过名称来引用表和列
类型化数据集允许对数据值进行编译时检查
类型化数据集比较消耗资源
创建类型化数据集一般使用组件设计器来创建
创建非类型化数据集
可以使用组件设计器创建,也可以使用编程方式创建
Tables集合
Relations集合
对于类型化数据集,Tables集合是由数据集架构定义的
对于非类型化数据集,Tables集合可以通过设计器创建表和表中的列,也可以使用编程方式创建表和表中的列
可包含零个或多个数据关系对象,每个对象表示两个表之间的关系
对于非类型化数据集,Relations集合可以通过关系集合编辑器或以编程方式添加数据关系对象
对于类型化数据集可以使用XML架构设计器或以编程方式添加数据关系对象
Clone方法
创建一个数据集副本,包括数据集的表、关系和约束对象
Copy方法
Clone方法只复制数据集的结构,Copy方法即复制数据集结构也复制其数据
Clear方法
数据表包含了实际的数据,数据表可以是数据集的一部分,也可以单独创建
数据表的基本功能是包含三种集合的容器
列集合:定义表的结构
行集合:包含的数据本身
约束集合:执行数据的完整性约束
创建与表匹配的新行
给新增加的行赋值
添加新行到数据集
DataTable.Select方法
RowState属性
数据行的RowState属性反映了数据表创建后或最近一次调用AcceptChanges后所执行的操作,其值由DataRowState枚举定义
Added、Deleted、Detached、Modified、Unchanged
行的版本
根据最近一次调用AcceptChanges以来对数据行的操作,数据表可以维持数据行的多个版本
Current、Default、Original、Proposed
AcceptChanges
数据集、数据表、数据行都支持该方法
DataAdapter的Update方法自动调用该方法
RejectChanges
放弃对数据集的修改
该方法将数据集恢复到上次调用AcceptChanges后的状态,放弃所有的新行,恢复被删除的行并把所有的列恢复到其初始值
这两个方法把数据行的RowStaus设为Unchanged
DataAdapter.Fill方法
以上代码完成的工作
打开数据库连接
对pubs数据库执行查询
在DataSet中创建一个名为Titles的DataTable并使用Titles表的架构初试化DataTable
检索查询产生的所有记录,写入DataTable中
关闭数据库连接
DataAdapter.Update方法
可以一次更新一个DataTable或者更新整个DataSet
根据SelectCommand生成其他三个命令
UniqueConstraint
ForeignKeyConstraint
创建 DataView
DataView dv = new DataView(ds.Tables[“*”]);
DataView 的属性
Table
获取或设置源DataTable
Sort
RowFilter
从视图中筛选数据
DataView 的方法
Find
根据主键查询