ADO.NET – 连接数据库
2 课程地位 STB SQL Server XML PSPM ASP.NET Oracle OOAD Computer Base HTML&JavaScript OOP\Java C C SQL Base JSP/Servlet EJB/WebService C# Struts/JSF Testing/SQA Linux WinForms
3 课程目标 使用 ADO.NET 构造数据库应用程序 WinForms 桌面程序设计 使用网络服务组件 掌握.NET 平台下的 C/S 结构应用程序的框架 熟练 C# 编码
4 本章目标 了解 ADO.NET 结构 了解 ADO.NET 的组件 使用 Command 对象和 Connection 对象 使用 ADO.NET 进行事务处理
5 ADO.NET 简介 4-1 以流的形式从文件中读写数据 以流的形式从文件中读写数据
6 ADO.NET 简介 4-2 以流的形式从文件中读写数据 中央数据库 要管理数据库,需要专门的软件应用程序 MS-ACCESS SQL-Server ORACLE
7 ADO.NET 简介 4-3 中央数据库 用户需要时,可以随时访问数据 用户计算机向数据库服务器发送请求 客户端 客户端 不同的访问方法和技术
8 ADO.NET 简介 4-4.NET Framework System.Data 命名空间 以 ActiveX 数据对象 (ADO) 为基础 以 XML (扩展标记语言)为格式传送和接收数据 以 ActiveX 数据对象 (ADO) 为基础 以 XML (扩展标记语言)为格式传送和接收数据
9 ADO.NET 的优点 互操作性 性能 可伸缩性 标准化 可编程能力
10 ADO.NET 的结构
11 ADO.NET 对数据库的访问 (3-1) 将数据传递到用户界面时, ADO.NET 采用 XML 格式 数据已缓存
12 ADO.NET 对数据库的访问 (3-2) 对于 Insert,Update,Delete 等单向操作 应用程序应用程序 数据库数据库 1 、用 Connection.Open 打开数据库 2 、用 DataAdaptor.Command 或者 Command.Execute 执行命令 3 、关闭数据库 Insert 用 InsertCommand Delete 用 DeleteCommand Update 用 UpdateCommand Insert 用 InsertCommand Delete 用 DeleteCommand Update 用 UpdateCommand
13 ADO.NET 对数据库的访问 (3-3) 应用程序应用程序数据库数据库 关闭数据库 1 、用 Connection.Open 建立连接 2 、用 DataAdaptor.SelectCommand 执行命令 DataAdaptor.Fill 对于 Select 的双向操作 DataSet
14 知识点小结 引入 ADO.NET 的原因 ADO.NET 的优缺点 ADO.NET 的组成结构 ADO.NET 对数据库的调用过程
15.NET 数据提供程序 5-1 Connection Command DataReader DataAdapter ADO.NET DataSet.NET Framework 数据提供程序 1 、 SQLClient 2 、 OLEDB 3 、 Oracle 4 、 ODBC 由以下各项组成的集合:
16.NET 数据提供程序 5-2 客户端 服务器 数据集 2 、将数据发送到数据集 A 、客户端修改数据集 3 、数据集传递给客户端 B 、将修改后的数据 集传递给服务器 1 、客户端从服务器请求数据 1 , 2 , 3 是从服务器检索数据的过程 A 、 B 是对数据库修改的过程
17.NET 数据提供程序 5-3 用于 SQL Server 的.NET Framework 数据提供程序 System.Data.SqlClient 命名空间 仅限于连接 SQL Server 数据库 7.0 或更高版本
18.NET 数据提供程序 5-4 用于 OLEDB 的.NET Framework 数据提供程序
19.NET 数据提供程序 5-5 用于 ODBC 的.NET Framework 数据提供程序的 命名空间 用于 Oracle 的.NET Framework 数据提供程序的 命名空间 System.Data.Odbc 命名空间 System.Data.OracleClient 命名空间
20 知识点小结 使用的名称空间 SQL Server using System.Data.SqlClient OLE DB using System.Data.OleDb Oracle using System.Data.OracleClient ODBC using System.Data.Odbc
21 Connection 对象 4-1.NET Framework 数据提供程序 Connection 类 SQL 数据提供程序 SqlConnection OLE DB 数据提供程序 OleDbConnection Oracle 数据提供程序 OracleConnection ODBC 数据提供程序 OdbcConnection 在 ADO.NET 中,必须显式关闭连接,才能释放实际的数据库连接
22 Connection 对象 4-2 方法 Close() Open() 属性 ConnectionString Database
23 Connection 对象 4-3 单击 “ 数据 ” 选项卡 SqlConnection 拖放 sqlConnection1 已添加 从列表中选择 SQL Server 指定用户名和密码 最后选择数据库 如果连接成功,则会显示一则消息
24 Connection 对象 4-4 使用代码编辑器 使用代码编辑器 SqlConnection objSqlConnection = new SqlConnection ("server = SQLDB; uid = sa; pwd = password; database = pubs"); objSqlConnection.Open(); objSqlConnection 创建的连接对象名称 SQLDB 存储 “pubs” 数据库的服务器名称,也可以写成 IP 地址, 如 本地服务器可以有以下几种写法: 1 、( local ) 2 、 、本地机子名称 uid, pwd 用户标识和密码
25 知识点小结 Connection 对象的作用 Connection 对象的两种使用方法 拖拉控件 写代码 四种典型的连接方式的应用名称空间和连接字符 串的写法 SqlConnection OleDbConnection OracleConnection OdbcConnection
26 Command 对象 7-1 数据库数据库 Command 对象指定要对数据库执行的操作 检索和操纵数据
27 Command 对象 7-2.NET Framework 数据提供程序 Command 类 SQL 数据提供程序 SqlCommand OLE DB 数据提供程序 OleDbCommand Oracle 数据提供程序 OracleCommand ODBC 数据提供程序 OdbcCommand 与数据库建立连接之后,可以使用 Command 对象执行 命令并从数据源返回结果
28 Command 对象 7-3 方法 ExecuteNonQuery() 返回受影响的行数 ExecuteScalar() 返回第一行第一列 ExecuteReader() 返回 DataReader 类型值 属性 CommandText 欲执行的内容,可以是 SQL 语 句或者存储过程名称 Connection CommandType 命令类型
29 Command 对象 7-4 用 SQL 语句的 Command 设置 SqlCommand objComm=new SqlCommand(); objComm.CommandText="SQL 语句 "; objComm.CommandType=CommandType.Text ; objComm. Connection=objConnection; 用存储过程的 Command 设置 SqlCommand objComm=new SqlCommand(); objComm.CommandText=“sp_DeleteName"; objComm.CommandType=CommandType. StoredProcedure ; objComm. Connection=objConnection; Sp_DeleteName 是在 SQL Server 服务器上创建的存储过程
30 Command 对象 6-4 单击 “ 数据 ” 选项卡 SqlCommand 拖放 已添加 sqlCommand1 将 sqlConnection1 设置为 sqlCommand1 的连接 在 CommandText 属性中键入 “Insert into FlightDetails values()”
31 Command 对象 7-6 已添加 “FlightDetails” 表 单击该表中所有字段旁边的框,以指定要在其中插入新值的列 为每一列指定新值 为每一列指定新值
32 Command 对象 7-7 使用代码编辑器 使用代码编辑器 SqlCommand objSqlCommand = new SqlCommand(strSQL); SqlCommand objSqlCommand = new SqlCommand(strSQL); objSqlConnection 创建的 Command 对象名称 strSQL 任何有效的 SQL 语句
33 知识点小结 Command 的作用 Command 的使用前提 Connection 打开 Command 的使用方法 命令文本方式 存储过程方式 Command 返回值类型 返回受影响的行数 返回第一行第一列 返回 DataReader
34.NET 中的事务处理 3-1 帐单 编号编号 说明数量价格总计 1 肥皂 编号: 日期: 2004 年 10 月 30 日 肥皂 关系表 数据库 年 10 月 30 日 已成功地完成对一个表的操作, 但是关系表尚未更新,因此, 数据会出现不一致的现象 成功地进行整个操作或者取消整个操作 确保 事务处理是一组数据操作,这些操作要么必须全部成功, 要么必须全部失败,以保证数据的一致性和完整性
35.NET 中的事务处理 3-2 Begin: 在执行事务处理中的任何操作之前,必须使用 Begin 命令来开始事务处理 Commit: 在成功将所有修改都存储于数据库时,才算是提 交了事务处理 Rollback: 由于在事务处理期间某个操作失败,而取消事务 处理已做的所有修改,这时将发生回滚 Begin: 在执行事务处理中的任何操作之前,必须使用 Begin 命令来开始事务处理 Commit: 在成功将所有修改都存储于数据库时,才算是提 交了事务处理 Rollback: 由于在事务处理期间某个操作失败,而取消事务 处理已做的所有修改,这时将发生回滚 事务处理命令 事务处理命令
36.NET 中的事务处理 3-3 类说明 OdbcTransaction 表示对数据源进行的 SQL 事务处理 OleDbTransaction 表示对数据源进行的 SQL 事务处理 OracleTransaction 表示对数据库进行的事务处理 SqlTransaction 表示要对 SQL Server 数据库进行的 Transact- SQL 事务处理
37 SqlTransaction 类 3-1 方法 属性 Save( ) Rollback( ) Commit( ) Connection SqlTransaction 类表示要对数据源进行的事务处理
38 SqlTransaction 类 3-2 在 ADO.NET 中实现事务处理时执行的步骤顺序 在 ADO.NET 中实现事务处理时执行的步骤顺序 SqlConnection objSqlConnection = new SqlConnection ("server=SQLDB; uid=sa; pwd=password; database=pubs"); objSqlConnection.Open(); 创建数据库连接并打开该连接 SqlTransaction objSqlTransaction = objSqlConnection.BeginTransaction(); 使用 BeginTransaction() 方法开始事务处理
39 SqlTransaction 类 3-3 objSqlCommand.Transaction = objSqlTransaction; 将 Command 对象的 Transaction 属性设置为事务处理对象 insertCommand = "Insert into Student (Id, Name)values (111, "Jim"); objSqlCommand.CommandText = insertCommand; objSqlCommand.ExecuteNonQuery (); 执行 SQL 命令 objSqlTransaction.Commit(); 如果操作过程中没有错误,则提交事务处理。如果 操作过程中发生错误,则回滚已完成的所有修改 objSqlConnection.Close(); 关闭连接
40 应用程序示例 7-1 在 VS.NET 2003 中新建一个名为示例 1 的基于 Windows 的项目。将默认窗体重命名为 frmFlight.cs 用户界面
41 应用程序示例 7-2 控件名称属性值 FormfrmFlightText 航班详细信息 ButtonbtnAddText 添加 (&A) btnModifyText 修改 (&M) btnDeleteText 删除 (&D) btnCancelText 取消 (&C) LabellblFlightCodeText 航班号: lblAirlineText 航空公司: lblDestinationText 终到站: lblSourceText 始发站: lblDepartureText 起飞: lblArrivalText 到达: ComboBoxcboSeatsText 座位数量:
42 应用程序示例 7-3 // Connection 对象和 Command 对象 private SqlConnection objSqlConnection; private SqlCommand objSqlCommand; // 类变量 private string insCmd; private string modCmd; private string delCmd; private void frmFlight_Load(object sender, System.EventArgs e) { // 初始化 connection 对象 objSqlConnection = new SqlConnection ("server = VIJAYK; database = Flights; uid = sa; pwd = playware"); // 将座位数量添加到组合框中 this.cboSeats.Items.Clear(); this.cboSeats.Items.Add("100"); this.cboSeats.Items.Add("150"); this.cboSeats.Items.Add("200"); this.btnModify.Enabled = false; this.btnDelete.Enabled = false; } 给组合框添加项并禁用按钮 初始化 connection 对象
43 应用程序示例 7-4 private void btnAdd_Click(object sender, System.EventArgs e) { // 插入命令 insCmd = "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 对象 objSqlCommand = new SqlCommand(insCmd, objSqlConnection); 将插入命令和 connection 对 象传递给 command 对象 btnAdd Click 事件处理程序
44 应用程序示例 7-5 try { // 打开连接 objSqlConnection.Open(); // 执行插入语句 objSqlCommand.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 { // 关闭连接 objSqlConnection.Close(); } 打开连接并执行 objSqlCommand 中的命令 btnAdd Click 事件处理程序
45 应用程序示例 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+"'"; objSqlCommand = new SqlCommand(modCmd, objSqlConnection); try { objSqlConnection.Open(); objSqlCommand.ExecuteNonQuery(); MessageBox.Show(“ 已成功更新记录 "); } catch(SqlException ex) { MessageBox.Show(ex.Message); } finally { objSqlConnection.Close(); } 设置更新命令 btnModify Click 事件处理程序
46 Sample Application 7-7 private void btnDelete_Click(object sender, System.EventArgs e) { delCmd = "delete from FlightDetails where FlightCode like '“ +this.txtFlightCode.Text+"'"; MessageBox.Show(delCmd); // 初始化 command 对象 objSqlCommand = new SqlCommand(delCmd, objSqlConnection); try { // 初始化 DialogResult DialogResult objDialogResult = MessageBox.Show(“ 您确定要删除当前记录吗? ", “ 确认 ", MessageBoxButtons.YesNo); // 确定用户的响应 if (objDialogResult.Equals(DialogResult.Yes)) { objSqlConnection.Open(); objSqlCommand.ExecuteNonQuery(); MessageBox.Show(“ 已删除记录 "); btnModify.Enabled = false; } btnDelete Click 事件处理程序
47 总结 2-1 .NET framework 中的 ADO.NET 是一组类,允许 应用程序与数据库交互,以便检索和更新信息 DataSet 和.NET 数据提供程序是 ADO.NET 的 两个主要组件 每种.NET 数据提供程序都是由以下四个对象组 成: Connection Command DataAdapter DataReader
48 总结 2-2 Connection 对象用于在应用程序和数据库之间建 立连接 Command 对象允许向数据库传递请求、检索和 操纵数据库中的数据 事务处理是一组数据操作,这些操作要么必须全 部成功,要么必须全部失败,以保证数据的一致 性和完整性