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
? 隔离级别
原文:http://www.cnblogs.com/lxh168/p/7450884.html