ADO.NET 连接方式进行数据访问

1. 连接环境简介

1.1. 连接环境的特点
 • 连接环境是指用户在这种环境下始终保持与数据源的连接
 • 优点
  –环境易于实施安全控制
  – 同步问题易于控制
 • 数据实时性优于其他环境
 • 缺点
  – 必须保持持续的网络连接
  – 扩展性差

1.2. 连接环境下的对象模型
 • XxxConnection
  – 建立与数据源的连接,如SqlConnection 用于建立与Microsoft SQLServer™ 的连接,OleDbConnection用于建立与任何支持OLEDB 的数据源的连接
 • XxxCommand
  – 执行数据源的命令,如 SqlCommand 可以调用一个 Microsoft SQL Server™ 的存储过程,XxxCommand 对象的ExecuteReader 方法可以
   返回一个XxxDataReader 对象
 • XxxDataReader
  – 以只读的、前向的方式,以流的形式读取数据,例如SqlDataReader 可以读取Microsoft SQL Server™ 中的数据
  – XxxDataReader 由 XxxCommand(通常是SELECT命令)的 ExecuteReader 方法返回
 • XxxXmlReader
  – 提供以快速的、无缓存的、前向的方式读取XML数据

1.3. 连接到数据源

定义连接
 • XxxConnection (如SqlConnection)
 • 连接字符串是包含数据连接参数的一个字符串,用于定义对数据源的连接
 • 连接字符串中包含的参数
 • 连接字符串的重要参数:
  – Provider 连接所用的数据提供程序的种类
  – Data Source 要连接的 SQL Server 的名称
  – Initial Catalog 要连接的数据库的名称
  – Integrated Security 使用Windows 验证确定用户权限
  – User ID/Password SQL Server登录名称和密码
  – Persist Security Info 连接后是否传送安全信息

1.4. 打开和关闭连接
 • 打开连接
  – XxxConnection.Open()
 • 关闭连接
  – XxxConnection.Close()
 • 退出连接池
  – XxxConnection.Dispose()

2. 创建命令

2.1. Command 对象
 • Command 对象是一个SQL语句或者存储过程的引用
 • Command 对象可以直接被执行
 • 属性
  – Name:可选属性,可以用于引用该对象
  – Connection:连接对象的引用,与数据库交互
  – CommandType:Text、StoredProcedure、DirectTable 的一种
  – CommandText:SQL 语句或者存储过程的名字
  – Parameters :可以有零个或多个参数

2.2. Command 对象的重要方法
 • ExecuteScalar
  –返回一个惟一的值
 • ExecuteNonQuery
  –用于更新数据库或改变数据库结构,返回被影响的行数
 • ExecuteReader
  –返回数据行的集合
 • ExecuteXmlReader (仅限于SqlCommand)
  –返回一个 XML 的结果集

3. 返回单个值

3.1. 返回单个值
 • 使用ExecuteScalar()方法
 • ADO.NET 比 ADO 效率更高,返回整个记录集
 • 示例
  – 一个特定产品的库存数量
  – 有多少个产品
  –使用 COUNT、MAX、MIN、AVERAGE

3.2. DEMO
 执行返回单个值的Command 命令

4. 返回数据行

 • 使用ExecuteReader()方法
  –返回一个 DataReader
  – 例如: SqlDataReader、OleDbDataReader
 • DataReader
  – 只读、前向,数据行的流

5. 使用 DataReader 获取数据
 • Read 方法
  – 得到下一行
  – 如果还有后续数据行存在,返回True;反之返回False
 • Item 属性
  – aReader[“aColumnName”] 或aReader[columnPosition]
 • GetXxx 方法,例如: GetString、 GetInt32
  – GetString[ColumnPosition](以基数零开始)
 • GetValues 方法
  – 一次返回当前行所有的列,高效
 • IsDbNull 方法
  – 用于测试是否返回NULL
 • Close 方法
  – Read 方法返回 False 时,应该调用 Close 方法关闭 DataReader,释放连接 

6. 返回多个结果集
 • 一个存储过程可能包含多条 SQL 语句
  –将相关的任务分组
  – 封装业务逻辑
 • 如果一个存储过程返回了多个结果集
  – 调用NextResult 移到下一个结果集
 • 判断有多少数据行被一个存储过程影响
  –使用 RecordsAffected 属性 

7. 不返回值
 • 使用ExecuteNonQuery()方法
 • 执行DDL和DCL语句
  – CREATE/ALTER/DROP
  – GRANT/DENY/REVOKE
 • 执行其它DML语句
  – INSERT/UPDATE/DELETE

8. Command 命令的参数
 • 介绍
  – SQL 语句和存储过程可以有输入输出参数以及返回值
  – Command对象参数用来设置或者返回这些参数
  – SqlParameter、OleDbParameter

 • ParameterName

  – 命令参数的名称,例如@CatId
 • DbTtype
  – 连接到数据库的类型,有 SqlType 和 OleDbType
 • Direction
  – ParameterDirection 枚举集指定的值,包括:
 • ParameterDirection.Input(输入)
 • ParameterDirection.InputOutput(输入输出)
 • ParameterDirection.Output(输出)
 • ParameterDirection.ReturnValue(返回值)

9. 事务
 • 事务是一系列相互关联的任务,作为一个整体成功提交或者失败(提交或者回滚)
 • ACID
  – Atomicity (原子):事务或者全部提交,或者全不提交
  – Consistency(一致):事务保证了数据的完整性
  – Isolation(分离):事务处理了数据操作的并发性
  – Durability(持续):即使在事务结束后发生系统崩溃等灾难性情况,事务涉及的数据操作也将正常保存

9.2. 使用 T-SQL 实现事务
 • SQL事务语句
  – BEGIN TRAN、COMMIT TRAN、ROLLBACK TRAN
• 代码示例

BEGIN TRAN
DECLARE @orderDetailsError int, @productError int
DELETE FROM "Order Details" WHERE ProductID=42
SELECT @orderDetailsError = @@ERROR
DELETE FROM Products WHERE ProductID=42
SELECT @productError = @@ERROR
IF @orderDetailsError = 0 AND @productError = 0
COMMIT TRAN
ELSE
ROLLBACK TRAN

 

9.3. 使用 ADO.NET 管理事务
 • XxxConnection – 例如SqlConnection
  – BeginTransaction
 • XxxTransaction – 例如SqlTransaction
  – Commit
  – Rollback
 • 隔离级别

posted @ 2017-08-29 23:28  tiger_yj  阅读(214)  评论(0编辑  收藏  举报