第四讲数据适配器Adapter学习目标5.4.3.2.1.DataAdapter介绍在代码中创建DataAdapter对象DataAdapter对象的属性介绍DataAdapter对象的方法介绍DataAdapter对象的事件介绍连接的和断开连接的环境连接的环境是用户或应用程序持续连接到数据源的环境。连接的环境提供以下优势:数据并发性问题更容易控制数据是当前的和更新的连接的环境具有以下限制:持续的网络连接有时可能导致网络流量阻塞应用程序中的可扩展性和性能问题介绍连接的和断开连接的环境断开连接的环境是在其中用户或应用程序不是直接连接到数据源的环境。断开连接的环境提供以下优势:允许多个应用程序同时与数据源进行交互。提高可扩展性和应用程序的性能。断开连接的环境具有以下限制:由于没有与数据源建立连接,数据不是总保持最新。当多个用户向数据源更新数据时,可能会发生数据并发性问题。ADO.NET中的连接的和断开连接的环境有关的类XMLDataSourceADO.NET断开连接的模型。模型的基本介绍以及讲解DataSet导学第一部分:DataAdapter简介DataAdapter的基本概念及分类。概念分类ADO.NET断开连接的模型ADO.NET提供了以下两种数据访问模型连接的模型。本模型使用户能使用数据提供程序连接到数据库并对数据库运行SQL命令,命令运行结束后将关闭和数据库之间的连接。断开连接的模型。本模型使得可以为来自数据源的数据创建内存中的缓存,然后与数据源之间断开连接。ADO.NET断开连接的模型(图)在ADO.NET中,DataSet是数据在内存中的表示形式,它提供了独立于数据源的关系编程模型。数据库与数据集之间起桥梁作用DataAdapter的基本概念DataAdapter是和数据集(DataSet)一起使用的对象,它包括在一个数据库连接后用于填充数据集和更新数据源的一组数据命令,在数据库与数据集之间起桥梁作用。DataAdapter的作用相当于绑定的DataSet对象和持久的数据存储之间的通道。上面讲的数据存储可以是数据库、XML文件、Excel、甚至是纯文本。DataAdapter是专门为处理脱机数据而设计的。DataAdapter的分类根据数据库的不同,将DataAdapter分类。SqlDataAdapter:不经过OLEDB层直接与SQLServer交互,速度较OleDbDataAdapter快。OleDbDataAdapter:适用于任何可以用OLEDB数据提供者访问的数据源。OdbcDataAdapter:访问来自ODBC数据提供器支持的数据库的数据OracleDataAdapter:访问来自Oracle数据提供器支持的数据库的数据OLEDB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。OLEDB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。作为微软的组件对象模型(COM)的一种设计,OLEDB是一组读写数据的方法(在过去可能被称为渠道)。什么是OLEDB?XxxDataAdapter对象模型四种数据命令对数据库进行读写。•DataAdapter构造函数•用DataAdapter填充结果集•打开和关闭连接•读取多个表•串讲数据绑定在代码中创建DataAdapter对象在代码中创建DataAdapter对象了解DataAdapter的几种构造函数,可以简化创建DataAdapter对象的过程。stringstrConn=@DataSource=.;InitialCatalog=northwind;UserID=MyUserid;Password=myPassword;stringstrSQL=select*fromsustomers;用查询串和连接字符串SqlDataAdapterda=newSqlDataAdapter(strSQL,strConn);该方式会为每个SqlDataAdapter创建一个新的SQLconnection对象,应适当选择。用查询串和连接对象SQLconnectioncn=newsqlConnection(strConn);SqlDataAdapterda=newSqlDataAdapter(strSQL,cn);比较常用的方式使用sqlcommand对象SQLCOMMANDcmd=newsqlcommand(strSQL,CN);SqlDataAdapterda=newSqlDataAdapter(cmd);已存在一个sqlcommand对象时使用DataAdapter——Fill方法Fill方法一共有4种常用的重构方法。Fill(DataSet)•DataSet结果集Fill(DataTable)•DataTable对象Fill(Int32,Int32,paramsDataTable[])•开始记录索引•要填充的数据表的行数•DataTable对象Fill(DataSet,Int32,Int32,String)•DataSet结果集对象•开始记录的索引•要填充的数据集的行数•表名用来控制数据阅读或插入、修改、删除或更新的属性。DataAdapter的属性用来控制与数据集之间通信的属性。DataAdapter的属性属性描述SelectCommand在数据源中检索数据的数据命令InsertCommand在数据源中插入数据的数据命令UpdateCommand在数据源中更新数据的数据命令DeleteCommand在数据源中删除数据的数据命令TableMappingsDataTableMapping对象的集合,决定DataSet中的行与数据源之间的关系UpdateBatchSize决定批进程支持,指出在批处理中可执行的命令的数量DataAdapter——4个命令属性的应用SelectCommand属性的应用。其他命令属性的设置与SelectCommand类似,只将对应的sql改为update、insert、delete即可SqlDataAdapteradapter=newSqlDataAdapter();SqlCommandcommand=newSqlCommand(SELECT*FROMSTUDENT+WHERESAGE=@SAGE,connection);command.Parameters.Add(@SAGE,SqlDbType.Int);command.Parameters[0].Value=age;adapter.SelectCommand=command;DataAdapter——TableMappings属性的应用重点代码演示:SqlDataAdapteradapter=CreateDataAdapter(conn,age);DataSetds=newDataSet();//Mappings的用法DataTableMappingmapping=adapter.TableMappings.Add(Table,学生表);mapping.ColumnMappings.Add(SNO,学生编号);mapping.ColumnMappings.Add(SName,学生姓名);mapping.ColumnMappings.Add(SDept,所在院系);mapping.ColumnMappings.Add(SClass,所在班级);mapping.ColumnMappings.Add(SSex,性别);mapping.ColumnMappings.Add(SAge,年龄);adapter.Fill(ds);dataGridView1.DataSource=ds.Tables[学生表];//使用设置好的映射表名字。dataGridView1.Refresh();在这一部分我们重点学习一下Fill和Update方法。DataAdapter有两个重要的方法:Fill()和Update()。前者从数据源把数据加载至DataSet,后者把数据从DataSet传回数据源。第四部分:DataAdapter的方法DataAdapter——利用Fill方法进行分页见课堂代码示例(Fill方法进行分页)代码提示:利用Fill的第四个构造函数Fill(DataSet,StartPageIndex,PageSize,String)DataAdapter——Update方法重点代码演示:填充DataSet时的代码:adapter.SelectCommand=newSqlCommand(SELECT*FROM”+”STUDENT,conn);SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter);adapter.Fill(ds);dataGridView1.DataSource=ds.Tables[0];dataGridView1.Refresh();更新时的代码:adapter.Update(ds);MessageBox.Show(更新成功);课堂示例用DataAdapter进行数据增删改查,及分页功能DataAdapter对象的事件列表:Disposed:当调用Dispose释放组件的时候调用。FillError:在填充操作过程中出现错误时返回。RowUpdated:在对数据源执行命令后的Update过程中发生,试图进行更新,因此激发该事件。RowUpdating:在对数据源执行命令前的Update过程中发生,试图进行更新,因此激发该事件。DataAdapter的事件DataAdapter的事件——代码演示privatevoidsqlDataAdapter1_RowUpdating(objectsender,SqlRowUpdatingEventArgse){textBox1.Text=数据正在更新……;}privatevoidsqlDataAdapter1_RowUpdated(objectsender,SqlRowUpdatedEventArgse){textBox1.Text+=数据更新完毕。;}汇总5.4.3.2.1.DataAdapter介绍在代码中创建DataAdapter对象DataAdapter对象的属性介绍DataAdapter对象的方法介绍DataAdapter对象的事件