




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,ADO.NET程序设计,执行连接环境下的数据库操作,第3章,2,内容,3,连接环境下对数据库的操作,连接环境下应用程序的对象模型,数据源,XxxCommand,4,连接环境下应用程序的对象模型,XxxConnection 建立与数据源的连接,如 SqlConnection 用于建立与 Microsoft SQL Server 的连接,OleDbConnection用于建立与任何支持 OLEDB 的数据源的连接 XxxCommand 执行数据源的命令,如 SqlCommand 可以调用一个 Microsoft SQL Server 的存储过程,XxxCommand 对象的 ExecuteReader 方法可以返回一个 XxxDataReader 对象,5,连接环境下应用程序的对象模型,XxxDataReader 以只读的、前向的方式,以流的形式读取数据,例如 SqlDataReader 可以读取 Microsoft SQL Server 中的数据 XxxDataReader 由 XxxCommand(通常是SELECT命令)的 ExecuteReader 方法返回 XxxXmlReader 提供以快速的、无缓存的、前向的方式读取XML数据,6,连接环境中对数据库操作的步骤,SQL Server 7.0 (或更高版本),SqlConnection,SqlCommand,SqlDataReader,7,8,数据命令对象的概念,一个 Command 对象是一个SQL语句或者存储过程的引用 Command 对象可以直接被执行 属性 Name:可选属性,可以用于引用该对象 Connection:连接对象的引用,与数据库交互 CommandType:Text、StoredProcedure、DirectTable 的一种 CommandText:SQL 语句或者存储过程的名字 Parameters :可以有零个或多个参数,9,数据命令对象的概念,方法 ExecuteScalar 返回一个惟一的值 ExecuteReader 返回数据行的集合 ExecuteNonQuery 用于更新数据库或改变数据库结构,返回被影响的行数 ExecuteXmlReader (仅限于SqlCommand) 返回一个 XML 的结果集,10,数据命令对象的创建,编程命令实现 使用 New 关键字创建一个新实例并设置其属性 cmd = new OleDbCommand(); cmd.CommandText = strSQL; cmd.Connection = cn; 使用指定了查询字符串与连接的构造函数 cmd = new OleDbCommand(strSQL, cn); 调用 Connection 对象的 CreateCommand 方法 cmd = cn.CreateCommand(); cmd.CommandText = strSQL;,11,连接SQL Server 2000实例,SqlConnection connSQL= new SqlConnection(); connSQL.ConnectionString=“Initial Catalog=Sales;Data Source=YUJIE;Integrated Security=true“; SqlCommand cmd=new Sqlcommand(); cmd.Connection=connSQL; cmd.CommandType=CommandType.Text; cmd.CommandText=“select * from products” /如果操作数据的存储过程则: cmd.CommandType=CommandType.StoredProcedure; cmd.CommandText=“存储过程的名称”,12,13,Command 对象参数,参数介绍 SQL 语句和存储过程可以有输入输出参数以及返回值 Command对象参数用来设置或者返回这些参数 使用SqlParameter、OleDbParameter创建参数对象 参数属性 ParameterName、DbType、Size、Direction,14,为 Command 对象创建参数,编程实现 ParameterName:命令参数的名称,例如 CatId DbTtype:连接到数据库的类型,有 SqlType 和 OleDbType Direction: ParameterDirection 枚举集指定的值,可以是: ParameterDirection.Input(默认值) ParameterDirection.InputOutput ParameterDirection.Output ParameterDirection.ReturnValue,15,使用参数的步骤,创建Connection对象 打开Connection对象 创建Command对象并设置相应的属性值 创建参数对象Parameter,并设置相应的属性值(有多少个参数就要创建多少个参数对象) 将建立好的参数添加到Command对象的Parameters集合中。 执行数据命令(我将在下一节中进行具体讲解) 关闭相关对象,16,使用参数的一个实例,假如我们有如下的存储过程,可以根据销售人员的代号,查询到该销售人员的人销售定单情况: create proc OrderList Sale_ID varchar(3) as select OrderID,OrderDate from Orders where SaleID=Sale_ID,17,/1、创建连接对象 SqlConnection conn = new SqlConnection(); conn.ConnectionString = “Initial Catalog=Sales;Data Source=YUJIE;Integrated Security=true“; conn.Open(); /2、创建command对象 SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = “OrderList“;,代码实现:,18,/3、创建Parameter对象 SqlParameter prmSID = new SqlParameter(); prmSID.ParameterName = “Sale_ID“; prmSID.Direction = ParameterDirection.Input; prmSID.SqlDbType = SqlDbType.VarChar; prmSID.Value = this.txtSID.Text.Trim(); /获得文本框中用户输入的内容 /4、将参数对象添加到参数集合中 cmd.Parameters.Add(prmSID); / SqlParameter prmSID=cmd.Parameters.Add(new SqlParameter(“Sale_ID“,SqlDbType.VarChar,4); / cmd.Parameters“Sale_ID“.Value = this.txtSID.Text.Trim();,19,/5、执行 SqlDataReader dr; dr = cmd.ExecuteReader(); while (dr.Read() this.lsOrderID.Items.Add(dr.GetInt32(0); this.lOrderDate.Items.Add(dr.GetDateTime(1); /6、关闭 dr.Close(); conn.Close(); 此例演示:实例OrderList中的查询,20,Command对象的方法应用举例,方法 ExecuteScalar 返回一个惟一的值 ExecuteReader 返回数据行的集合 ExecuteNonQuery 用于更新数据库或改变数据库结构,返回被影响的行数 演示:实例OrderList,21,22,数据阅读器,当执行命令对象后,返回多行数据时就会使用数据阅读器 DataReader 只读、前向,数据行的流 Command的ExecuteReader方法 返回一个 DataReader 例如: SqlDataReader、OleDbDataReader,23,数据阅读器DataReader 的属性与方法,Read 方法 得到下一行 如果还有后续数据行存在,返回True;反之返回False Item 属性 aReader“aColumnName” 或aReadercolumnPosition GetXxx 方法,例如: GetString、 GetInt32 GetStringColumnPosition(以基数零开始),24,数据阅读器DataReader 的属性与方法,GetValues 方法 一次返回当前行所有的列,高效 IsDbNull 方法 用于测试是否返回NULL Close 方法 Read 方法返回 False 时,应该调用 Close 方法关闭 DataReader,释放连接,25,使用 DataReader 对象处理一个结果集示例代码,SqlCommand cmdProducts = new SqlCommand(“SELECT ProductName, UnitsInStock FROM Products”, cnNorthwind); cnNorthwind.Open(); SqlDataReader rdrProducts = cmdProducts.ExecuteReader( ); While( rdrProducts.Read() ListBox1.Items.Add(rdrProducts.GetString(0); rdrProducts.Close();,26,27,使用事务机制,事务是一系列相互关联的任务,作为一个整体成功提交或者失败(提交或者回滚) ACID Atomicity (原子): 事务或者全部提交,或者全不提交 Consistency(一致): 事务保证了数据的完整性 Isolation(分离): 事务处理了数据操作的并发性 Durability(持续): 即使在事务结束后发生系统崩溃等灾难性情况,事务涉及的数据操作也将正常保存,28,使用 SQL 语句管理事务,SQL事务语句 BEGIN TRANS、COMMIT TRANS、ROLLBACK TRANS 代码示例 BEGIN TRANS 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 TRANS ELSE ROLLBACK TRANS,29,使用 ADO.NET 管理事务,XxxConnection 例如 SqlConnection BeginTransaction XxxTransaction 例如 SqlTransaction Commit Rollback 代码示例如下,30,/ Open the database connection, and begin a transaction. / Execute two DELETE statements within the transaction. / Commit or rollback the transaction, as appropriate cnNorthwind.Open(); SqlTransaction trans = cnNorthwind.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnNorthwind; cmd.Transaction = trans; try cmd.CommandText = “DELETE Order Details WHERE ProductID = 42“; cmd.ExecuteNonQuery(); cmd.CommandText = “DELETE Products WHERE ProductID = 42“; cmd.ExecuteNonQuery(); trans.Commit(); catch (Exception e) trans.Rollback(); ,31,隔离级别,并发问题举例 Dirty Reads(脏读) 当一个查询选择了正在被更改的一行时,正在读取的数据可能还没有提交,而这时另一个查询可能更改数据 Non-repeatable Reads(不可重复读取) 一个查询两次读取得到的数据不一致,这是由于在两次查询之间另一个事务更新了数据 Phantom Reads(幻象读) 一个事务读取一个当前正在被删除的数据,而重新读取的时候,该行数据已经不存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省抚州市2024-2025学年八年级下学期期末语文试题(解析版)
- 摄影店装修基础知识培训课件
- 2025果园承包经营的合同模板
- 2025年高二【数学(人教A版)】抛物线的简单几何性质-教学设计
- 2025房地产中介服务合同
- 2025关于建筑工程项目资金贷款合同范本
- 公司财务知识培训心得
- 贸易行业高级面试题库与贸易执行相关的面试问题及解答
- 职场达人必看深度解析面试题及应对策略
- 插曲课件中的计时器
- 一次调频综合指标计算及考核度量方法
- 车辆段平面布置设计
- 四大会计师事务所面试题
- HY/T 112-2008超滤膜及其组件
- GB/T 4669-2008纺织品机织物单位长度质量和单位面积质量的测定
- GB/T 4604-2006滚动轴承径向游隙
- GB/T 31315-2014机械结构用冷拔或冷轧精密焊接钢管
- Fanuc系统宏程序教程
- 腾讯云TCA云架构工程师考试真题
- 兽医产科学之公畜科学课件
- 动物育种学第四章生产性能测定
评论
0/150
提交评论