《ADONET查询和检索数据ppt课件.pptx》由会员分享,可在线阅读,更多相关《ADONET查询和检索数据ppt课件.pptx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、回顾.NET framework 中的 ADO.NET 是一组允许应用程序与数据库交互,以便检索和更新信息的类 DataSet 和.NET 数据提供程序是 ADO.NET 的两个主要组件每种.NET 数据提供程序都是由以下四个对象组成:ConnectionCommandDataAdapterDataReaderConnection 对象用于建立应用程序与数据库之间的连接Command 对象允许向数据库传递请求,检索和操纵数据库中的数据事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性第1页/共28页问题ADO.NET的两个主要组成部分是?ADO.NE
2、T中数据提供程序包含哪几个对象?Command返回值有哪几种?对数据库的操作一般分成哪几个步骤?事务处理一般分成哪几步骤?举例说明在什么情况下采用事务处理?第2页/共28页目标理解并使用数据集对象理解 DataAdapter 对象理解 DataReader对象第3页/共28页DataSetDataSet是存储从数据库检索到的数据的对象是零个或多个表对象的集合,这些表对象由数据行和列、约束和有关表中数据关系的信息组成不直接与数据库交互既可容纳数据库的数据,也可以容纳非数据库的数据源DataSet 类的层次结构DataSetDataColumnCollectionDataRowCollection
3、DataColumnDataRowDataTableCollectionDataTable第4页/共28页DataSet类类类类说明说明说明说明DataTableCollection 包含特定数据集的所有 DataTable 对象DataTable 表示数据集中的一个表DataColumnCollection 表示 DataTable 对象的结构DataRowCollection 表示 DataTable 对象中的实际数据行DataColumn 表示 DataTable 对象中列的结构DataRow 表示 DataTable 对象中的一个数据行DataSet 层次结构中的类第5页/共28页数据
4、集的工作原理客户端服务器数据集数据集将数据发送到数据集客户端修改数据集将数据集传递给客户端将修改后的数据集传递给服务器客户端向服务器请求数据第6页/共28页 数据集的类型数据集的类型类型化数据集非类型化数据集它是一个生成类,继承了基类 DataSet 的所有方法、事件和属性表和列只能以集合的形式公开,而不能用于借助 XML 结构文件派生新类使用类型化数据集访问列string employeeName;employeeName=dsEmployees.Emp0.EmpName;从 dsEmployees 数据集的 Emp 表中第一个记录返回 EmpName 列,然后将其存储在 employeeN
5、ame 字符串变量中使用非类型化数据集访问列 string employeeName;employeeName=dsEmployees.TablesEmp.Rows0EmpName;使用 Tables 集合返回 EmpName 列第7页/共28页使用 C#代码创建数据集数据集实例是由 DataSet 构造函数创建的数据集的名称是可选的,不需要指定如果没有指定名称,则以默认名称 NewDataSet 创建数据集属性说明DataSetName 用于获取或设置当前数据集的名称Tables 用于检索数据集中包含的表集合方法说明Clear清除数据集中包含的所有表的所有行HasChanges 返回一个布尔
6、值,指示数据集是否更改了DataSet empDS=new DataSet(EmployeeDetails);第8页/共28页DataTable、DataColumn和DataRow数据集中的数据以 DataTable 对象的形式存储DataTable 类属于 System.Data 命名空间属性说明Columns 表示列的集合或 DataTable 包含的 DataColumnConstraints 表示特定 DataTable 的约束集合DataSet 表示 DataTable 所属的数据集PrimaryKey 表示作为 DataTable 主键的字段或 DataColumnRows表示行
7、的集合或 DataTable 包含的 DataRowHasChanges 返回一个布尔值,指示数据集是否更改了方法说明AcceptChanges提交对该表所做的所有修改NewRow 添加新的 DataRow事件说明ColumnChanged 修改该列中的值时激发该事件RowChanged 成功编辑行后激发该事件RowDeleted 成功删除行时激发该事件DataTable objStudentTable=new DataTable(Students);创建 DataTable 对象的实例DataSet studentDS=new DataSet();DataTable objStudentTa
8、ble=studentDS.Tables.Add(Students);创建 DataTable 的实例,然后将其添加到数据集的 Tables 集合中第9页/共28页DataTable、DataColumn和DataRowDataColumn 对象定义 DataTable 的列DataTable 的 Columns 属性含有对 DataColumn 对象的引用属性属性说明说明AllowDBNull 表示一个值,指示对于该表中的行,此列是否允许表示一个值,指示对于该表中的行,此列是否允许 null 值值ColumnName表示指定表示指定 DataColumn 的名称的名称DataType 表示指
9、定表示指定 DataColumn 对象中存储的数据类型对象中存储的数据类型DefaultValue 表示新建行时该列的默认值表示新建行时该列的默认值Table表示表示 DataColumn 所属的所属的 DataTable 的名称的名称Unique 表示表示 DataColumn 的值是否必须是唯一的的值是否必须是唯一的DataTable objStudentTable=new DataTable(Students);DataColumn objStudentNumber=objStudentTable.Columns.Add (StudentNo,typeof(Int32);objStude
10、ntNumber.AllowDBNull=false;objStudentNumber.DefaultValue=25;objStudentTable.Columns.Add(StudentName,typeof(Int32);objStudentTable.Columns.Add(StudentMarks,typeof(Double);使用多个 DataColumn 对象创建 DataTable第10页/共28页DataTable、DataColumn和DataRowDataRow 对象表示 DataTable 中的实际数据属性属性说明说明Item表示表示 DataRow 的指定列中存储的值
11、的指定列中存储的值RowState 表示行的当前状态表示行的当前状态Table表示用于创建表示用于创建 DataRow 的的 DataTable 的名称的名称方法方法说明说明AcceptChanges 用于提交自上次调用了用于提交自上次调用了 AcceptChanges 之后对该行所做的所有修改之后对该行所做的所有修改Delete Deletes the DataRow 用于删除用于删除 DataRowRejectChanges 用于拒绝自上次调用了用于拒绝自上次调用了 AcceptChanges 之后对之后对 DataRow 所做的所有修改所做的所有修改/定义表结构,为Students表添加
12、学号、姓名、分数三列DataTable objStudentTable=new DataTable(Students);DataColumn objStudentNumber=new DataColumn();objStudentNumber.DataType=objStudentTable.Columns.Add (StudentNo,typeof(string);objStudentNumber.AllowDBNull=false;objStudentNumber.DefaultValue=25;objStudentTable.Columns.Add(StudentName,typeof(
13、string);objStudentTable.Columns.Add(StudentMarks,typeof(Double);/向表中填充数据DataRow objStudentRow;objStudentRow=objStudentTable.NewRow();objStudentRowStudentNo=101;objStudentRow“StudentName”=“张三;objStudentRowStudentMarks=55;objStudentTable.Rows.Add(objStudentRow);在 DataTable 对象中新建 DataRow第11页/共28页定义主键表中
14、的主键用于对记录进行唯一标识DataTable 的 PrimaryKey 属性接受含有一个或多个 DataColumn 对象的数组objStudentTable.PrimaryKey=new DataColumnobjStudentTable.ColumnsStudentNo;设置单个列为 DataTable 的主键objStudentTable.PrimaryKey=new DataColumn objStudentTable.ColumnsStudentNo,objStudentTable.ColumnsStudentName ;为 DataTable 对象设置复合主键第12页/共28页D
15、ataTable 的约束Constraint是对表中数据施加的限制或规则集决定表中可以存储的数据用于维护数据的正确性和有效性约束的类型ForeignKeyConstraint UniqueConstraint 第13页/共28页DataViewDataView用作 DataTable 中存储的数据的表示层提供对 DataTable 进行排序、筛选和搜索的自定义视图允许 WinForms 控件进行数据绑定可用于查看 DataTable 中存储的数据的子集数据绑定是为了在控件上显示数据库表中存储的数据,而将应用程序的控件与数据表的行进行绑定的过程属性说明Item用于从指定的表中获取一行数据RowF
16、ilter 用于获取或设置表达式,该表达式用于筛选可以在 DataView 中查看的行RowStateFilter 用于获取 DataView 的行状态筛选器Table用于表示源 DataTable方法说明AddNew 向 DataView 添加新行Delete用于删除指定索引处的行DataView objStudentView=new DataView(objStudentTable);objStudentView.RowFilter=StudentMarks 60;for(int ctr=0;ctr objStudentView.Count;ctr+)MessageBox.Show(obj
17、StudentViewctrStudentNo.ToString();创建 DataView 并对该视图应用某种筛选器第14页/共28页知识点小结使用DataSet的优点及使用场合DataSet的层次结构操纵DataSet中指定行中特定列的值在程序中向DataSet中动态添加表、字段、值、约束利用DataView筛选数据第15页/共28页数据命令DataAdapterDataAdapter 对象DataSetDataTable DataRow 集合DataColumn 集合Constraint 集合数据源数据源填充脱机数据库非永久连接第16页/共28页DataAdapter 对象.NET Fr
18、amework.NET Framework 数据数据数据数据提供程序提供程序提供程序提供程序Connection Connection 类类类类SQL 数据提供程序SqlDataAdapter OLE DB 数据提供程序OleDbDataAdapter Oracle 数据提供程序OracleDataAdapter ODBC 数据提供程序OdbcDataAdapter.NET 提供程序及其 DataAdapter 类DataAdapter 类的属性和方法属性说明AcceptChangesDuringFill 决定在把行复制到 DataTable 中时对行所做的修改是否可以接受TableMappi
19、ngs 容纳一个集合,该集合提供返回行和数据集之间的主映射方法说明Fill用于添加或刷新数据集,以便使数据集与数据源匹配FillSchema 用于在数据集中添加 DataTable,以便与数据源的结构匹配Update 将DataSet里面的数值存储到数据库服务器上第17页/共28页OLEDBDataAdapter用于访问任何由 OleDb 提供程序公开的数据源用作数据集和数据源之间的桥梁,以便检索和存储数据与 OleDbConnection 和 OleDbCommand 一起使用以提高性能DataAdapter 类的属性和方法属性说明InsertCommand 表示用于在数据库中插入新记录的
20、SQL 语句或存储过程UpdateCommand 表示用于在数据库中更新记录的 SQL 语句或存储过程DeleteCommand 表示用于从数据库中删除记录的 SQL 语句或存储过程SelectCommand 表示用于从数据库中选择记录的 SQL 语句或存储过程事件说明RowUpdated 在对数据源执行更新命令之后的过程中激发该事件RowUpdating 在对数据源执行命令更新之前的过程中激发该事件OleDbConnection objOleConnection=new OleDbConnection();objOleConnection.ConnectionString=Provider=
21、Microsoft.Jet.OLEDB.4.0;Data Source=+D:Students.mdb;objOleConnection.Open();string query=SELECT*from Student;DataSet objDataSet=new DataSet();OleDbDataAdapter objOleAdapter=new OleDbDataAdapter();objOleAdapter.SelectCommand=new OleDbCommand(query,objOleConnection);objOleAdapter.Fill(objDataSet,Stude
22、nts);传递给 OleDbAdapter 对象将数据填充到数据集中第18页/共28页SQLDataAdapter它设计为使用 Microsoft SQL Server 7 或更高版本提供最佳通信该适配器在数据集和 Microsoft SQL Server 之间起桥梁作用,提供用于保存和检索数据的接口与 SqlConnection 和 SqlCommand 相互配合使用SqlConnection objSqlConnection=new SqlConnection (SERVER=MYSERVER;database=Students;uid=sa;password=playware);SqlD
23、ataAdapter objSqlAdapter=new SqlDataAdapter(SELECT*from Student,objSqlConnection);objSqlConnection.Open();DataSet objDataSet=new DataSet();objSqlAdapter.Fill(objDataSet,Students);创建与 SQL Server 数据库的连接,并用相应的值填充数据集第19页/共28页知识点小结DataAdapter的作用DataAdapter的组成DataAdapter的属性、方法使用DataAdapter对数据的选择、添加、删除和修改第
24、20页/共28页DataReaderDataReader只读只进记录集数据源数据源查询只读和只进访问 需要永久连接.NET 数据提供程序及其 DataReader 类.NET Framework 数据提数据提供程序供程序DataReader 类类SQL 数据提供程序SqlDataReader OLE DB 数据提供程序OleDbDataReader Oracle 数据提供程序OracleDataReader ODBC 数据提供程序OdbcDataReader 第21页/共28页DataReader属性说明FieldCount 返回当前行中的列数HasRows 容纳一个指示读取器是否含有一行或多
25、行的值IsClosed 表示 DataReader 是否关闭RecordsAffected 表示执行 SQL 语句之后修改、插入或删除的行数方法说明Close 用于关闭 DataReader 对象GetBoolean 用于获取特定列的布尔值GetInt32 用于返回列的整型值DataReader 对象的属性和方法方法说明GetString 用于获取特定列的 String 值GetValue 用于返回本机格式的特定列的值Read使 DataReader 前移到下一个记录SqlConnection objSqlConnection=new SqlConnection(SERVER=MYSERVER
26、;database=Students;uid=sa;password=playware);string query=SELECT*from Student;SqlCommand objSqlCommand=new SqlCommand(query,objSqlConnection);objSqlConnection.Open();SqlDataReader objSqlReader=objSqlCommand.ExecuteReader();while(objSqlReader.Read()MessageBox.Show(“学号:+objSqlReader.GetValue(0);执行给定查询
27、、从数据流中检索行,并将结果集绑定到 DataReader 类的给定实例中 第22页/共28页用于查询和检索数据的示例演示:创建 Windows 应用程序示例的步骤“乘客详细信息”窗体 u创建一个名为“Example 1”的 Windows 应用程序u将 Form1.cs 更改为 frmPassenger.csu设计窗体,如图 2.3 所示u命名控件u将以下命名空间包含在项目中u在类声明部分声明以下变量using System.Data;using System.Data.SqlClient;private SqlConnection objSqlConnection;private SqlD
28、ataAdapter objDataAdapter;第23页/共28页用于查询和检索数据的示例将以下代码添加到 frmPassenger 的 Load 事件中。在 btnAdd 按钮的 Click 事件中添加以下代码。private void frmPassenger_Load(object sender,System.EventArgs e)this.cboSex.Items.Add(“男);this.cboSex.Items.Add(“女);objSqlConnection=new SqlConnection(server=MYSERVER;database=Flights;uid=sa;
29、pwd=playware;);向组合框中添加值创建 Sql 连接private void btnAdd_Click(object sender,System.EventArgs e)try objSqlConnection.Open();DataSet objDataSet=new DataSet();objDataAdapter=new SqlDataAdapter(Select*from Passenger,objSqlConnection);objDataAdapter.Fill(objDataSet,Passenger);objDataAdapter.InsertCommand=obj
30、SqlConnection.CreateCommand();打开 Sql 连接新建数据集填充数据集objDataAdapter.InsertCommand.CommandText=INSERT INTO Passenger(FlightCode,PassportNo”+”,Name,SeatNo,Sex,Age)+VALUES(+this.txtFlightCode.Text+,“+this.txtPassport.Text+,+this.txtName.Text+,“+this.txtSeatNo.Text+,“+this.cboSex.SelectedItem.ToString()+,“+
31、this.txtAge.Text+);DataTable objDataTable=new DataTable();objDataSet.Tables.Add(objDataTable);DataRow objDataRow=objDataSet.Tables0.NewRow();创建显式、可重用的 INSERT 命令objDataRowFlightCode=this.txtFlightCode.Text;objDataRowPassportNo=this.txtPassport.Text;objDataRowName=this.txtName.Text;objDataRowSeatNo=Co
32、nvert.ToInt32(this.txtSeatNo.Text);objDataRowSex=this.cboSex.SelectedText;objDataRowAge=Convert.ToInt32(this.txtAge.Text);objDataSet.Tables0.Rows.Add(objDataRow);/objDataAdapter.Update(objDataSet,Passenger);Application.DoEvents();MessageBox.Show(“已插入行);this.ClearFields();catch(SqlException ex).第24页/
33、共28页用于查询和检索数据的示例在 btnDelete 按钮的 Click 事件中添加下列代码。private void btnDelete_Click(object sender,System.EventArgs e)try objSqlConnection.Open();DataSet objDataSet=new DataSet();objDataAdapter=new SqlDataAdapter(Select*from Passenger,objSqlConnection);objDataAdapter.Fill(objDataSet,Passenger);objDataAdapte
34、r.DeleteCommand=objSqlConnection.CreateCommand();objDataAdapter.DeleteCommand.CommandText=DELETE from Passenger where FlightCode=+this.txtFlightCode.Text+;DataTable objDataTable=new DataTable();objDataSet.Tables.Add(objDataTable);打开连接创建显式、可重用的 DELETE 命令。foreach(DataRow dr in objDataSet.Tables0.Rows)
35、if(drFlightCode.Equals(this.txtFlightCode.Text)DataRow objDataRow=dr;this.txtFlightCode.Text=objDataRowFlightCode.ToString();this.txtPassport.Text=objDataRowPassportNo.ToString();this.txtName.Text=objDataRowName.ToString();this.txtSeatNo.Text=objDataRowSeatNo.ToString();this.cboSex.SelectedText=objD
36、ataRowSex.ToString();this.txtAge.Text=objDataRowAge.ToString();objDataRow.Delete();删除数据集中的记录objDataAdapter.Update(objDataSet,Passenger);objDataSet.AcceptChanges();MessageBox.Show(“已删除记录);ClearFields();break;else MessageBox.Show(“未找到记录);break;catch(SqlException ex).如果未找到记录,则显示一条错误消息第25页/共28页用于查询和检索数据
37、的示例在项目中添加 ClearFields()方法在 btnCancel 按钮的 Click 事件中添加代码private void ClearFields()this.txtName.Text=;this.txtFlightCode.Text=;this.txtAge.Text=;this.txtPassport.Text=;this.txtSeatNo.Text=;this.cboSex.Text=;private void btnCancel_Click(object sender,System.EventArgs e)this.Close();第26页/共28页总结在 DataSet 对象内表示的数据是数据库的部分或全部的断开式内存副本DataAdapter 对象用来填充数据集和用更新集到数据库,这样方便了数据库和数据集之间的交互类型化数据集对象是 DataSet 类的派生类的实例,这些类都基于 XML 结构DataTable 表示一个内存数据表,而 DataColumn 表示 DataTable 中列的结构DataView 是 DataTable 中存储的数据的表示层DataReader 对象提供只进、只读和连接式数据访问,并要求使用专用的数据连接DataReader 对象提供检索强类型化数据的方法第27页/共28页感谢您的观看!第28页/共28页