450 likes | 646 Views
第六章. 数据库编程 - 连接数据库. 本章目标. 了解 ADO.NET 结构 了解 ADO.NET 的组件 使用 Command 对象和 Connection 对象 使用 ADO.NET 进行事务处理. ADO.NET 简介 2 - 1. ADO .NET. 不同的访问方法和技术. 用户计算机向数据库服务器发送请求. 中央数据库. 客户端. 用户需要时,可以随时访问数据. ADO.NET 简介 2 - 2. .NET Framework. ADO .NET. 以 ActiveX 数据对象 ( ADO ) 为基础
E N D
第六章 数据库编程-连接数据库
本章目标 • 了解ADO.NET 结构 • 了解ADO.NET 的组件 • 使用Command 对象和 Connection 对象 • 使用ADO.NET 进行事务处理
ADO.NET简介 2-1 ADO .NET 不同的访问方法和技术 用户计算机向数据库服务器发送请求 中央数据库 客户端 用户需要时,可以随时访问数据
ADO.NET简介 2-2 .NET Framework ADO .NET 以 ActiveX数据对象 (ADO) 为基础 以 XML(扩展标记语言)为格式传送和接收数据 System.Data命名空间
ADO.NET的优点 • 互操作性 • 性能 • 可伸缩性 • 标准化 • 可编程能力
ADO.NET对数据库的访问(3-1) 断开式数据结构 数据已缓存 将数据传递到用户界面时, ADO.NET采用 XML格式
ADO.NET对数据库的访问(3-2) 对于Insert,Update,Delete 等单向操作 Insert用InsertCommand Delete 用DeleteCommand Update用UpdateCommand 应用程序 数据库 1、用Connection.Open打开数据库 2、用DataAdaptor.Command或者 Command.Execute 执行命令 3、关闭数据库
ADO.NET对数据库的访问(3-3) 对于Select的双向操作 1、用Connection .Open建立连接 应用程序 数据库 2、用DataAdaptor.SelectCommand 执行命令 DataAdaptor.Fill DataSet 关闭数据库
Connection Command DataReader DataAdapter .NET 数据提供程序 5-1 ADO.NET DataSet .NET Framework数据提供程序 由以下各项组成的集合: 1、SQLClient 2、OLEDB 3、Oracle 4、ODBC
.NET 数据提供程序 5-2 1、客户端从服务器请求数据 3、数据集传递给客户端 2、将数据发送到数据集 数据集 服务器 客户端 B、将修改后的数据集传递给服务器 A、客户端修改数据集 1,2,3是从服务器检索数据的过程 A、B是对数据库修改的过程
.NET 数据提供程序 5-3 • 用于 SQL Server的 .NET Framework 数据提供程序 System.Data.SqlClient命名空间 仅限于连接 SQL Server 数据库 7.0或更高版本
.NET 数据提供程序 5-4 • 用于 OLEDB的 .NET Framework 数据提供程序
.NET 数据提供程序 5-5 • 用于 ODBC的 .NET Framework 数据提供程序的命名空间 • 用于 Oracle的 .NET Framework 数据提供程序的命名空间 System.Data.Odbc命名空间 System.Data.OracleClient命名空间
知识点小结 • 使用的名称空间 • SQL Server using System.Data.SqlClient • OLE DB using System.Data.OleDb • Oracleusing System.Data.OracleClient • ODBCusing System.Data.Odbc
桥梁 为什么使用 Connection 请求数据 应用程序 数据源 Connection
示例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("关闭数据库连接成功"); 表示本机
Connection 主要成员 必须显式关闭连接
连接数据库步骤 • 连接数据库的步骤: 1、定义连接字符串 没有密码,可省略 Data Source=服务器名;Initial Catalog=数据库名; User ID=用户名;Pwd=密码 2、创建 Connection 对象 SqlConnection connection = new SqlConnection(connString); 连接字符串 3、打开与数据库的连接 connection.Open( );
Connection 对象 不同命名空间的 Connection 对象
小结 连接到本机的 pubs 数据库 关键代码 // 连接字符串 string connString = "Data Source=.;Initial Catalog=pubs;User ID=sa"; // 创建Connection 对象 SqlConnection connection = new SqlConnection(connString); connection.Open(); // 打开数据库连接 …… connection.Close(); // 关闭数据库连接
? 怎样处理数据 为什么使用 Command 执行命令并从数据源中返回结果 应用程序 打开数据库 处理数据 …… Command 数据源 Connection
使用 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(); 要进行类型转换!
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服务器上创建的存储过程
综合示例 • 完成系统登录功能 1、验证管理员的用户名和密码是否存在 2、验证通过,显示管理员主窗体 • 处理登录按钮的 Click 事件 • 定义一个 ValidateUser() 方法 • 需要 Connection 和 Command 对象 • 分两步实现验证: 1、建立数据库连接 2、验证用户是否存在
用户验证方法框架 ValidateUser() 方法框架 1、验证的结果:通过,不通过 返回值为 bool 型 2、方法需要: 用户名,密码,登录类型 值方式传参 3、不通过的原因: 用户名或密码不存在、其他原因 引用方式传参 public bool ValidateUser(string loginType, string loginId, string loginPwd, ref string message) { }
用户验证方法具体实现 • 第一步:建立数据库连接 • 增加 DBHelper 类 ValidateUser() 方法具体实现 • 第二步:查询用户是否存在 • SELECT COUNT(*) • ExecuteScalar() 方法查询
小结 增加验证用户的代码 // 查询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();
总结 • Connection 对象的什么方法用来打开和关闭数据库连接? • ExecuteScalar()方法返回什么?
知识点小结 • Connection对象的作用 • Connection对象的两种使用方法 • 拖拉控件 • 写代码 • 四种典型的连接方式的应用名称空间和连接字符串的写法 • SqlConnection • OleDbConnection • OracleConnection • OdbcConnection
帐单 编号:12439日期: 2004年10月30日 编号 说明 数量 价格 总计 肥皂 1 5 20 100 .NET 中的事务处理 3-1 确保 成功地进行整个操作或者取消整个操作 不完整的 关系表 12439 12439 事务处理! 2004 年 10 月 30 日 数据库 肥皂 5 事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性 已成功地完成对一个表的操作,但是关系表尚未更新,因此,数据会出现不一致的现象
.NET 中的事务处理 3-2 事务处理命令 • Begin: 在执行事务处理中的任何操作之前,必须使用 Begin 命令来开始事务处理 • Commit: 在成功将所有修改都存储于数据库时,才算是提交了事务处理 • Rollback: 由于在事务处理期间某个操作失败,而取消事务处理已做的所有修改,这时将发生回滚
SqlTransaction类 3-1 SqlTransaction类表示要对数据源进行的事务处理 方法 属性 Connection Save() Commit() Rollback()
SqlTransaction类 3-2 在 ADO.NET中实现事务处理时执行的步骤顺序 SqlConnection sqlConn = new SqlConnection ("server=SQLDB; uid=sa; pwd=sa; database=pubs"); sqlConn.Open(); 创建数据库连接并打开该连接 SqlTransaction sqlTrans = sqlConn.BeginTransaction(); 使用 BeginTransaction() 方法开始事务处理
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(); 关闭连接
应用程序示例 7-1 在 VS.NET 2005 中新建一个名为Example1 的基于 Windows 的项目。将默认窗体命名为 frmFlight.cs 用户界面
应用程序示例 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对象 给组合框添加项并禁用按钮
应用程序示例 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对象
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中的命令
应用程序示例 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 事件处理程序 设置更新命令
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事件处理程序
总结 2-1 • .NET framework 中的 ADO.NET是一组类,允许应用程序与数据库交互,以便检索和更新信息 • DataSet和 .NET 数据提供程序是 ADO.NET的两个主要组件 • 每种 .NET 数据提供程序都是由以下四个对象组成: • Connection • Command • DataAdapter • DataReader
总结 2-2 • Connection对象用于在应用程序和数据库之间建立连接 • Command对象允许向数据库传递请求、检索和操纵数据库中的数据 • 事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性