1 / 45

第六章

第六章. 数据库编程 - 连接数据库. 本章目标. 了解 ADO.NET 结构 了解 ADO.NET 的组件 使用 Command 对象和 Connection 对象 使用 ADO.NET 进行事务处理. ADO.NET 简介 2 - 1. ADO .NET. 不同的访问方法和技术. 用户计算机向数据库服务器发送请求. 中央数据库. 客户端. 用户需要时,可以随时访问数据. ADO.NET 简介 2 - 2. .NET Framework. ADO .NET. 以 ActiveX 数据对象 ( ADO ) 为基础

marly
Download Presentation

第六章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六章 数据库编程-连接数据库

  2. 本章目标 • 了解ADO.NET 结构 • 了解ADO.NET 的组件 • 使用Command 对象和 Connection 对象 • 使用ADO.NET 进行事务处理

  3. ADO.NET简介 2-1 ADO .NET 不同的访问方法和技术 用户计算机向数据库服务器发送请求 中央数据库 客户端 用户需要时,可以随时访问数据

  4. ADO.NET简介 2-2 .NET Framework ADO .NET 以 ActiveX数据对象 (ADO) 为基础 以 XML(扩展标记语言)为格式传送和接收数据 System.Data命名空间

  5. ADO.NET的优点 • 互操作性 • 性能 • 可伸缩性 • 标准化 • 可编程能力

  6. ADO.NET对数据库的访问(3-1) 断开式数据结构 数据已缓存 将数据传递到用户界面时, ADO.NET采用 XML格式

  7. ADO.NET对数据库的访问(3-2) 对于Insert,Update,Delete 等单向操作 Insert用InsertCommand Delete 用DeleteCommand Update用UpdateCommand 应用程序 数据库 1、用Connection.Open打开数据库 2、用DataAdaptor.Command或者 Command.Execute 执行命令 3、关闭数据库

  8. ADO.NET对数据库的访问(3-3) 对于Select的双向操作 1、用Connection .Open建立连接 应用程序 数据库 2、用DataAdaptor.SelectCommand 执行命令 DataAdaptor.Fill DataSet 关闭数据库

  9. Connection Command DataReader DataAdapter .NET 数据提供程序 5-1 ADO.NET DataSet .NET Framework数据提供程序 由以下各项组成的集合: 1、SQLClient 2、OLEDB 3、Oracle 4、ODBC

  10. .NET 数据提供程序 5-2 1、客户端从服务器请求数据 3、数据集传递给客户端 2、将数据发送到数据集 数据集 服务器 客户端 B、将修改后的数据集传递给服务器 A、客户端修改数据集 1,2,3是从服务器检索数据的过程 A、B是对数据库修改的过程

  11. .NET 数据提供程序 5-3 • 用于 SQL Server的 .NET Framework 数据提供程序 System.Data.SqlClient命名空间 仅限于连接 SQL Server 数据库 7.0或更高版本

  12. .NET 数据提供程序 5-4 • 用于 OLEDB的 .NET Framework 数据提供程序

  13. .NET 数据提供程序 5-5 • 用于 ODBC的 .NET Framework 数据提供程序的命名空间 • 用于 Oracle的 .NET Framework 数据提供程序的命名空间 System.Data.Odbc命名空间 System.Data.OracleClient命名空间

  14. 知识点小结 • 使用的名称空间 • SQL Server using System.Data.SqlClient • OLE DB using System.Data.OleDb • Oracleusing System.Data.OracleClient • ODBCusing System.Data.Odbc

  15. 桥梁 为什么使用 Connection 请求数据 应用程序 数据源 Connection

  16. 示例1 代码分析 • 关键代码回顾 // 数据库连接字符串 string connString = "Data Source= . ;Initial Catalog=MySchool;User ID=sa"; // 创建Connection 对象 SqlConnection connection = new SqlConnection(connString); // 打开数据库连接 connection.Open(); MessageBox.Show("打开数据库连接成功"); // 关闭数据库连接 connection.Close(); MessageBox.Show("关闭数据库连接成功"); 表示本机

  17. Connection 主要成员 必须显式关闭连接

  18. 连接数据库步骤 • 连接数据库的步骤: 1、定义连接字符串 没有密码,可省略 Data Source=服务器名;Initial Catalog=数据库名; User ID=用户名;Pwd=密码 2、创建 Connection 对象 SqlConnection connection = new SqlConnection(connString); 连接字符串 3、打开与数据库的连接 connection.Open( );

  19. Connection 对象 不同命名空间的 Connection 对象

  20. 小结 连接到本机的 pubs 数据库 关键代码 // 连接字符串 string connString = "Data Source=.;Initial Catalog=pubs;User ID=sa"; // 创建Connection 对象 SqlConnection connection = new SqlConnection(connString); connection.Open(); // 打开数据库连接 …… connection.Close(); // 关闭数据库连接

  21. ? 怎样处理数据 为什么使用 Command 执行命令并从数据源中返回结果 应用程序 打开数据库 处理数据 …… Command 数据源 Connection

  22. Command 的主要成员

  23. 使用 Command 步骤 • 使用Command步骤: 1、创建数据库连接 2、定义 SQL 语句 3、创建 Command 对象 4、执行命令 执行命令前,必须打开数据库连接! SqlConnection connection = new SqlConnection(connString); string sql = "SELECT COUNT(*) FROM Student"; connection.Open();// 打开数据库连接 SqlCommand command = new SqlCommand(sql, connection); int num = (int)command.ExecuteScalar(); 要进行类型转换!

  24. Command对象 • 用SQL 语句的Command设置 SqlCommand Comm=new SqlCommand(); Comm.CommandText="SQL 语句"; Comm.CommandType=CommandType.Text ; Comm. Connection=sqlConn; • 用存储过程的Command设置 SqlCommand Comm=new SqlCommand(); Comm.CommandText="sp_UpdateName"; Comm.CommandType=CommandType. StoredProcedure ; Comm. Connection=sqlConn; 其中,Sp_UpdateName是在SQL Server服务器上创建的存储过程

  25. 综合示例 • 完成系统登录功能 1、验证管理员的用户名和密码是否存在 2、验证通过,显示管理员主窗体 • 处理登录按钮的 Click 事件 • 定义一个 ValidateUser() 方法 • 需要 Connection 和 Command 对象 • 分两步实现验证: 1、建立数据库连接 2、验证用户是否存在

  26. 用户验证方法框架 ValidateUser() 方法框架 1、验证的结果:通过,不通过 返回值为 bool 型 2、方法需要: 用户名,密码,登录类型 值方式传参 3、不通过的原因: 用户名或密码不存在、其他原因 引用方式传参 public bool ValidateUser(string loginType, string loginId, string loginPwd, ref string message) { }

  27. 用户验证方法具体实现 • 第一步:建立数据库连接 • 增加 DBHelper 类 ValidateUser() 方法具体实现 • 第二步:查询用户是否存在 • SELECT COUNT(*) • ExecuteScalar() 方法查询

  28. 小结 增加验证用户的代码 // 查询Student 表使用的SQL 语句 string sql = string.Format( "SELECT COUNT(*) FROM Student WHERE LogInId='{0}' AND LogInPwd='{1}'",txtLogInId, txtLogInPwd); // 使用的Command 对象 SqlCommand command = new SqlCommand(sql, DBHelper.connection); DBHelper.connection.Open(); // 执行查询,返回找到的个数 count = (int)command.ExecuteScalar();

  29. 总结 • Connection 对象的什么方法用来打开和关闭数据库连接? • ExecuteScalar()方法返回什么?

  30. 知识点小结 • Connection对象的作用 • Connection对象的两种使用方法 • 拖拉控件 • 写代码 • 四种典型的连接方式的应用名称空间和连接字符串的写法 • SqlConnection • OleDbConnection • OracleConnection • OdbcConnection

  31. 帐单 编号:12439日期: 2004年10月30日 编号 说明 数量 价格 总计 肥皂 1 5 20 100 .NET 中的事务处理 3-1 确保 成功地进行整个操作或者取消整个操作 不完整的 关系表 12439 12439 事务处理! 2004 年 10 月 30 日 数据库 肥皂 5 事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性 已成功地完成对一个表的操作,但是关系表尚未更新,因此,数据会出现不一致的现象

  32. .NET 中的事务处理 3-2 事务处理命令 • Begin: 在执行事务处理中的任何操作之前,必须使用 Begin 命令来开始事务处理 • Commit: 在成功将所有修改都存储于数据库时,才算是提交了事务处理 • Rollback: 由于在事务处理期间某个操作失败,而取消事务处理已做的所有修改,这时将发生回滚

  33. .NET 中的事务处理 3-3

  34. SqlTransaction类 3-1 SqlTransaction类表示要对数据源进行的事务处理 方法 属性 Connection Save() Commit() Rollback()

  35. SqlTransaction类 3-2 在 ADO.NET中实现事务处理时执行的步骤顺序 SqlConnection sqlConn = new SqlConnection ("server=SQLDB; uid=sa; pwd=sa; database=pubs"); sqlConn.Open(); 创建数据库连接并打开该连接 SqlTransaction sqlTrans = sqlConn.BeginTransaction(); 使用 BeginTransaction() 方法开始事务处理

  36. SqlTransaction类 3-3 Comm.Transaction = sqlTrans; 将 Command 对象的 Transaction属性设置为事务处理对象 insertCommand = "Insert into Student (Id, Name)values (200494012, “WangLi"); Comm.CommandText = insertCommand; Comm.ExecuteNonQuery (); 执行 SQL命令 sqlTrans.Commit(); 如果操作过程中没有错误,则提交事务处理。如果操作过程中发生错误,则回滚已完成的所有修改 sqlConn.Close(); 关闭连接

  37. 应用程序示例 7-1 在 VS.NET 2005 中新建一个名为Example1 的基于 Windows 的项目。将默认窗体命名为 frmFlight.cs 用户界面

  38. 应用程序示例 7-2

  39. 应用程序示例 7-3 • private void frmFlight_Load(object sender, System.EventArgs e) • { • // 初始化 connection 对象 • sqlConn = new SqlConnection • ("server = jeny; database = Flights; uid = sa; pwd = sa"); • // 将座位数量添加到组合框中 • this.cboSeats.Items.Clear(); • this.cboSeats.Items.Add(“200"); • this.cboSeats.Items.Add(“250"); • this.cboSeats.Items.Add(“300"); • this.btnModify.Enabled = false; • this.btnDelete.Enabled = false; • } // Connection 对象和 Command 对象 private SqlConnection sqlConn; private SqlCommand sqlComm; // 类变量 private string instrCmd; private string modCmd; private string delCmd; 初始化 connection对象 给组合框添加项并禁用按钮

  40. 应用程序示例 7-4 btnAdd Click事件处理程序 • private void btnAdd_Click(object sender, System.EventArgs e) • { • // 插入命令 • instrCmd = "insert into FlightDetails values • ('"+this.txtFlightCode.Text+"', '"+this.txtAirline.Text+"','“ • +this.txtDestination.Text+"', '“+this.txtSource.Text+"','“ • +this.txtArrival.Text+"', '"+this.txtDeparture.Text+"', “ • +this.cboSeats.SelectedItem.ToString()+")"; • // 初始化 command 对象 • sqlComm = new SqlCommand(instrCmd, sqlConn); 将插入命令和 connection对象传递给 command对象

  41. try • { • // 打开连接 • sqlConn.Open(); • // 执行插入语句 • sqlComm.ExecuteNonQuery(); • MessageBox.Show(“已成功添加记录"); • // 启用和禁用按钮 • this.btnModify.Enabled = true; • this.btnDelete.Enabled = true; • this.btnAdd.Enabled = false; • this.txtFlightCode.Enabled = false; • } • catch(SqlException ex) • { • MessageBox.Show(ex.Message); • } • finally • { • // 关闭连接 • sqlConn.Close(); • } • } 应用程序示例 7-5 btnAdd Click事件处理程序 打开连接并执行 sqlComm中的命令

  42. 应用程序示例 7-6 • private void btnModify_Click(object sender, System.EventArgs e) • { • modCmd = "update FlightDetails set Airline = '“ • +this.txtAirline.Text+"', Destination = '“ • +this.txtDestination.Text+"', • Source = '"+this.txtSource.Text+"', • Arrival = '"+this.txtArrival.Text+"', • Departure = '"+this.txtDeparture.Text+"', • TotalSeats = "+this.cboSeats.SelectedItem.ToString()+" • where FlightCode like '"+this.txtFlightCode.Text+"'"; • sqlComm = new SqlCommand(modCmd, sqlConn); • try • { • sqlConn.Open(); • sqlComm.ExecuteNonQuery(); • MessageBox.Show(“已成功更新记录"); • } • catch(SqlException ex) • { • MessageBox.Show(ex.Message); • } • finally • { • sqlConn.Close(); • } • } btnModify Click 事件处理程序 设置更新命令

  43. private void btnDelete_Click(object sender, System.EventArgs e) • { • delCmd = "delete from FlightDetails where FlightCode like '“ +this.txtFlightCode.Text+"'"; • MessageBox.Show(delCmd); • // 初始化 command 对象 • sqlComm = new SqlCommand(delCmd, sqlConn); • try • { • // 初始化 DialogResult • DialogResult objDialogResult = • MessageBox.Show(“您确定要删除当前记录吗?", • “确认", MessageBoxButtons.YesNo); • // 确定用户的响应 • if (objDialogResult.Equals(DialogResult.Yes)) • { • sqlConn.Open(); • sqlComm.ExecuteNonQuery(); • MessageBox.Show(“已删除记录"); • btnModify.Enabled = false; • } • } Sample Application 7-7 btnDelete Click事件处理程序

  44. 总结 2-1 • .NET framework 中的 ADO.NET是一组类,允许应用程序与数据库交互,以便检索和更新信息 • DataSet和 .NET 数据提供程序是 ADO.NET的两个主要组件 • 每种 .NET 数据提供程序都是由以下四个对象组成: • Connection • Command • DataAdapter • DataReader

  45. 总结 2-2 • Connection对象用于在应用程序和数据库之间建立连接 • Command对象允许向数据库传递请求、检索和操纵数据库中的数据 • 事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性

More Related