




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章ADO.NET数据访问接口4第2部分VB.NET数据库开发进阶本部分包括5章:第4章ADO.NET数据访问接口第5章数据绑定与数据控件第6章水晶数据报表设计第7章数据图表系统开发第8章XML与数据Web服务大纲◎ADO.NET的结构与ADO.NET的核心组件◎Connection、Command、DataReader、DataAdapter和DataSet对象的定义与使用◎使用VB.NET和ADO.NET操作数据库4.1数据访问接口技术概述数据访问接口定义了应用程序访问数据库的方式,方式的不同决定了不同的访问效率以及程序的编写方式。微软数据访问方式的技术包括如下的6种。1.ODBC(OpenDatabaseConnectivity,开放数据库互联)技术,是第一个使用SQL访问不同关系数据库的数据访问技术。使用ODBC应用程序能够通过单一的命令操纵不同的数据库,而开发人员需要做的仅仅只是针对不同的应用加入相应的ODBC驱动。2.DAO(DataAccessObjects,数据访问对象)技术,不像ODBC面向C/C++程序员,它是微软提供给VisualBasic开发人员的一种简单的数据访问方法,用于操纵Access数据库。3.RDO(RemoteDataObject,远程数据对象)技术。在使用DAO访问不同的关系型数据库的时候,数据引擎要在DAO和ODBC之间进行命令的转化,导致了性能的下降,RDO可以有效的防止性能下降。4.OLEDB(ObjectLinkingandEmbeddingDatabase,对象连接嵌入数据)技术。随着越来越多的数据以非关系型格式存储,需要一种新的架构来提供这种应用和数据源之间的无缝连接,基于COM(ComponentObjectModel,组件对象模型)的OLEDB实现了这种需求。5.ADO(ActiveXDataObjects,活动组件数据对象)技术。基于OLEDB之上的ADO更简单、更高级、更适合程序员,同时消除了OLEDB的多种弊端。6.ADO.NET是.NET中新出现的数据访问技术,也可是认为是ADO的高版本。ADO.NET不像以前的ADO版本是站在为了存取数据库的观点而设计的,ADO.NET是为更广泛的数据控制而设计,所以使用起来比以前的ADO更灵活有弹性,也提供了更多的功能。ADO.NET的出现并不是要来取代ADO,而是要提供更有效率的数据存取。4.1.1ADO与ADO.NET的关系ADO.NET基于XML和离线计算模型。两者的区别主要有:ADO以Recordset存储,而ADO.NET则以DataSet表示。Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接,而DataSet可以是多个表的集合。ADO必须以在线方式运行,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET只需要在读取和操作数据库的时候在线。ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NET基于XML格式,数据类型更为丰富,并且不需要因为COM规范而进行数据类型转换,从而提高了整体性能。ADO.NET为.NET构架提供了优化的数据访问模型,和基于COM的ADO是完全两样的数据访问方式。4.1.2ADO.NET的基本结构ADO.NET支持对MicrosoftSQLServer等数据源的一致访问。使用者可以使用ADO.NET来连接到数据源并检索、操作和更新数据。ADO.NET结构如图4-1所示。4.2ADO.NET核心组件ADO.NET包括2个核心组件:DataSet和数据提供程序,涉及的5个核心对象分别是:Connection、Command、DataReader、DataAdapter和DataSet对象,4.2.1DataSetADO.NET的核心组件是DataSet,内部用XML描述数据,具有平台无关性。DataSet中常用的对象是DataTable和DataRow等。DataSet通过DataAdapter对象从数据源得到数据,DataAdapter是连接DataSet和数据库的一个桥梁,因此DataAdapter命名为“数据适配器”。DataSet是开发基于.NET平台数据库应用程序最常用的类。DataSet类在ADO.NET中具有特殊的地位,因为DataSet在ADO.NET实现从数据库抽取数据中起到关键作用,在从数据库完成数据读取后,DataSet是数据存放地方,它把各种数据源中的数据在计算机内存中映射成缓存。DataSet有三个特性:1.独立性。2.离线连接。3.XML描述。4.2.2数据提供程序每种.NET数据提供程序都包括4个核心对象,分别是表4-1中类的派生类。
4.2.2数据提供程序1.SQLServer.NET数据提供程序2.OleDb.NET数据提供程序3.OracleDb.NET数据提供程序4.ODBC.NET数据提供程序4.3ADO.NET五个核心对象详解ADO.NET对象模型中包括5个数据库访问和操作对象,其中,Connection对象主要负责连接数据库,Command对象主要负责生成并执行SQL语句,DataReader对象主要负责读取数据库中的数据,DataAdapter对象主要负责在Command对象执行完SQL语句后生成并填充DataSet和DataTable,而DataSet对象主要负责存取和更新数据。4.3.1Connection对象Connection对象的方法查看数据库连接状态
案例名称:查看数据库连接状态工程名称:Proj4-1ImportsSystem.Data.OleDbPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsOleDbConnectionDimdaAsOleDbDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTry'连接C盘根目录下的persons.mdb数据库文件Conn=NewOleDbConnection()Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_"DataSource=c:\persons.mdb"Conn.Open()MessageBox.Show(Conn.State.ToString())Conn.Close()CatchMessageBox.Show("数据库连接有错误!")EndTryEndSubEndClass查看数据库连接状态
案例名称:查看数据库连接状态工程名称:Proj4-2(节选)Try'连接C盘根目录下的persons.mdb数据库文件Conn=NewOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"&_"DataSource=c:\persons.mdb")Conn.Open()MessageBox.Show(Conn.State.ToString())Conn.Close()CatchMessageBox.Show("数据库连接有错误!")EndTry4.3.2Command对象Command对象功能是执行SQL语句。利用Command对象,可以查询数据和修改数据。Command对象是由Connection对象创建的,其连接的数据源也由Connection来管理。而使用Command对象的SQL属性获得的数据对象,将由DataReader和DataAdapter对象填充到DataSet里,从而完成对数据库数据操作的工作。Command对象的常用属性有Connection、ConnectionString、CommandType、CommandText和CommandTimeout,功能如表4-4所示。Command对象的属性1.Command对象的构造函数2.ExecuteReader方法ExecuteReader方法在Command对象中用得比较多,通过DataReader类型的对象,应用程序能够获得执行SQL查询语句后的结果集。该方法的两种定义为:1.ExecuteReader(),不带参数,直接返回一个DataReader结果集。2.ExecuteReader(CommandBehaviorbehavior),根据behavior的取值类型,决定DataReader的类型。如果behavior取值是CommandBehavior.SingleRow,则说明返回的ExecuteReader只获得结果集中的第一条数据。如果取值是CommandBehavior.SingleResult,则说明只返回在查询结果中多个表里的第一个。使用ExecuteReader方法案例名称:使用ExecuteReader方法工程名称:Proj4-4ImportsSystem.Data.SqlClientPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsSqlConnectionDimdaAsSqlDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTry'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()DimCommAsNewSqlCommand(TextBox1.Text,Conn)DimdrAsSqlDataReaderdr=Comm.ExecuteReader()DimdtAsDataTabledt=NewDataTable()dt.Load(dr)DataGridView1.DataSource=dtConn.Close()CatchMessageBox.Show("数据库连接有错误!")EndTryEndSubEndClass使用BingdingSource实现数据绑定
案例名称:使用BingdingSource实现数据绑定工程名称:Proj4-5(节选)Try'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()DimCommAsNewSqlCommand(TextBox1.Text,Conn)DimdrAsSqlDataReaderdr=Comm.ExecuteReader()DimbsAsNewBindingSource()bs.DataSource=drDataGridView1.DataSource=bsConn.Close()CatchMessageBox.Show("数据库连接有错误!")EndTry3.ExecuteScalar方法案例名称:使用ExecuteScalar方法工程名称:Proj4-6(节选)Try'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()DimCommAsSqlCommandComm=NewSqlCommand("selectavg(数学)fromgrade",Conn)DimstrAsStringstr=Comm.ExecuteScalar().ToString()Label1.Text="所有人数学的平均成绩为"+str+"分"Conn.Close()CatchMessageBox.Show("数据库连接有错误!")EndTryEndSub4.ExecuteNonQuery方法案例名称:使用ExecuteNonQuery方法工程名称:Proj4-7ImportsSystem.Data.SqlClientPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsSqlConnectionDimdaAsSqlDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTry'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()DimStrSQLAsStringStrSQL="insertintograde(学号,姓名,语文,数学,英语)"&_"values("&TextBox1.Text&",'"&TextBox2.Text&_"',"&TextBox3.Text&","&TextBox4.Text&","&TextBox5.Text&")"DimCommAsNewSqlCommand(StrSQL,Conn)Comm.ExecuteNonQuery()Conn.Close()MessageBox.Show("添加数据成功!")CatchMessageBox.Show("数据库连接有错误!")EndTryEndSubEndClass5.ADO.NET事务处理事务具有两个作用:1.一致性:同时进行的查询和更新彼此不会发生冲突,其他用户不会看到发生了变化但尚未提交的数据。2.可恢复性:一旦系统故障,数据库会自动地完全恢复未完成的事务。不加控制并发存取数据会产生错误:比如:1.丢失修改:当多个事务并发修改一个数据时,不加控制会得出错误的结果,一个修改会覆盖掉另一个修改。2.读的不可重复性。当多个事务按某种时间顺序存取若干数据时,如果对并发存取不加控制,也会产生错误。3脏读(DirtyRead),当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的,等等。5.ADO.NET事务处理在ADO.NET中,使用Connection和Transaction对象来控制事务。事务建立顺序包括:1.调用Connection对象的BeginTransaction方法来标记事务的开始;2.将Transaction对象分配给要执行的Command的Transaction属性;3.执行所需的命令;4.调用Transaction对象的Commit方法来完成事务,或调用Rollback方法来取消事务。ADO.NET事务处理案例名称:ADO.NET事务处理工程名称:Proj4-8ImportsSystem.Data.SqlClientPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsSqlConnectionDimdaAsSqlDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()DimCommAsNewSqlCommand()DimTransAsSqlTransactionTrans=Conn.BeginTransaction()Comm.Connection=ConnComm.Transaction=TransTryComm.CommandText="UPDATEgradeSET数学=100WHERE姓名LIKE'%周%'"Comm.ExecuteNonQuery()Comm.CommandText="UPDATEgradeSET数学=60WHERE姓名LIKE'%张%'"Comm.ExecuteNonQuery()Trans.Commit()Label1.Text="事务运行成功"CatchTrans.Rollback()Label1.Text="出现错误,事务已经回滚!"FinallyConn.Close()EndTryEndSubEndClass4.3.3DataReader对象DataReader对象提供单向只读数据,只能依次读取数据,DataSet中的数据可以任意读取和修改。DataReader对象有一个很重要的方法Read,它是个布尔值,作用是读取下一条数据,当布尔值为真时执行,为假时退出。DataReader从数据库当中检索只读的数据流,存储在客户端的网络缓冲区当中。在内存当中只存储一行,具有开销小,速度快的特点。由于数据不在内存中缓存,所以在检索大量数据时,DataReader是一种较好的选择。DataReader只能通过Command对象ExecuteReader()来创建,不能实例化。DataReader具有独占性,如果在已经打开DataReader的情况下,将不能对Connection进行任何操作,必须在用完时关闭它,调用Close()方法。通过Command对象返回多个结果集,并且通过DataReader对象NextResult()方法来使用。DataReader对象案例名称:DataReader对象工程名称:Proj4-9ImportsSystem.Data.SqlClientPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsSqlConnectionDimdaAsSqlDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()DimCommAsNewSqlCommand(TextBox1.Text,Conn)DimdrAsSqlDataReaderdr=Comm.ExecuteReader()DimstrOutputAsStringstrOutput=""TryWhiledr.Read()strOutput+=dr("学号").ToString()+Space(10)strOutput+=dr("姓名").ToString()+Space(10)strOutput+=dr("语文").ToString()+Space(10)strOutput+=dr("数学").ToString()+Space(10)strOutput+=dr("英语").ToString()+Space(10)strOutput+=Chr(13)+Chr(10)EndWhileCatchMessageBox.Show("出现异常!")Finallydr.Close()Conn.Close()EndTryLabel1.Text=strOutputEndSubEndClass4.3.4DataAdapter对象通过DataAdapter对象初始化DataTable,和DataSet对象结合起来在内存存放数据表副本,实现离线式数据库操作。DataAdapter对象允许将DataSet对象中的数据保存到数据源中,可以从数据源中读取数据,并可以进行数据的添加、删除、更新等操作。DataAdapter对象是一个双向通道,用来把数据从数据源中读到一个内存表中,也可以把内存中的数据写更新到一个数据源中。两种情况下使用的数据源可以相同,也可以不相同。这两种操作分别称作填充(Fill)和更新(Update)。DataAdapter对象的常用属性如表4-6所示。DataAdapter对象的常用属性及说明DataAdapter对象的方法1.DataAdapter对象的构造函数2.DataAdapter对象的Fill方法当调用Fill方法时,它将向数据存储区传输一条SELECT语句,主要用来填充或刷新DataSet,返回值是影响DataSet的行数。该方法的常用定义如表4-9所示。使用Fill方法案例名称:使用Fill方法工程名称:Proj4-10ImportsSystem.Data.SqlClientPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsSqlConnectionDimdaAsSqlDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTry'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.ConnectionString="DataSource=(local);InitialCatalog=Sales;"&_"IntegratedSecurity=false;UserID=sa;Password=sa123"Conn.Open()da=NewSqlDataAdapter(TextBox1.Text,Conn)ds=NewDataSet()da.Fill(ds,"mytb1")DataGridView1.DataSource=ds.Tables("mytb1")Conn.Close()CatchMessageBox.Show("数据库连接有错误!")EndTryEndSubEndClass3.DataAdapter对象的Update方法当调用Update方法时,DataAdapter将检查参数DataSet每一行的RowState属性,根据RowState属性来检查DataSet里的每行是否改变和改变的类型,并依次执行所需的INSERT、UPDATE或DELETE语句,将改变提交到数据库中,同时返回影响DataSet的行数。使用工程Proj4-11演示Update方法的使用,这个工程是一个比较综合的例子4.DataAdapter对象的Command属性DataAdapter对象还可以通过4个属性传递数据,给4个属性赋值的对象必须是Command对象。如果Command对象执行的是Select语句,必须将对象传递给SelectCommand属性;如果是Update语句,则传递给UpdateCommand属性;如果是Insert语句,则传递给InsertCommand属性;如果是Delete语句,则传递给DeleteCommand对象。4.3.5DataSet对象DateSet对象是实现离线访问技术的核心,DataSet不依赖于数据源,独立存在于内存中。可以把DataSet想象成内存中的数据库,DateSet对象中数据采用XML格式表示,借助XML可以描述具有复杂关系的数据,这使得采用DataSet对象能够容纳相互之间具有复杂关系的数据;因此一个DataSet除了可以包含任意数目的表,每个表一般对应于一个数据库表或视图之外,一个DataSet还可以包含表间关系、数据约束等,所有这些和关系数据库模型基本一致,所以无论它包含的数据来自什么数据源,都会提供一致的关系编程模型。DataSet中的重要对象包括:1.TablesCollection对象。DataSet里的表用DataTable来表示,一个DataSet里面可以包含多个DataTable,这些DataTable就构成了TablesCollection对象。每个DataTable中都包含一个ColumnsColleciton和一个RowsCollection对象。2.RelationsCollection对象。各个DataTable之间的关系通过DataRelation来表达,这些DataRelation构成的集合就是RelationsCollection对象。3.ExtendedProperties对象。用来定义特定的信息,比如密码、更新时间等。程序创建DataSet对象案例名称:程序创建DataSet对象工程名称:Proj4-14PublicClassForm1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadDimmydsAsNewDataSet()DimmydtAsNewDataTable("Squares")DimmydrAsDataRowDimiAsIntegermydt.Columns.Add(NewDataColumn("数字",GetType(Integer)))mydt.Columns.Add(NewDataColumn("平方",GetType(Integer)))Fori=0To10mydr=mydt.NewRow()mydr(0)=imydr(1)=i*imydt.Rows.Add(mydr)Nextmyds.Tables.Add(mydt)DataGridView1.DataSource=myds.Tables("Squares")EndSubEndClass使用DataView对象排序案例名称:使用DataView对象排序工程名称:Proj4-15ImportsSystem.Data.SqlClientPublicClassForm1'声明Connection,DataAdapter和DataSet对象。DimConnAsSqlConnectionDimdaAsSqlDataAdapterDimdsAsDataSetPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTry'连接本地SQLServer数据库Conn=NewSqlConnection()Conn.Connec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大健康行业财务管理制度
- 动物药物实验室管理制度
- 办事处特种行业管理制度
- 变电站急救用品管理制度
- 同仁堂中药饮片管理制度
- 核酸检测工作管理制度
- 幼儿园阅读设备管理制度
- 月子中心订餐管理制度
- 租车会员gps管理制度
- 景区警卫工作管理制度
- 2025年养老护理员职业考试试题及答案
- 揭阳惠来县纪委监委等部门属下事业单位招聘笔试真题2024
- 党课课件含讲稿:以作风建设新成效激发干事创业新作为
- 超市百货考试试题及答案
- 城投公司工程管理制度
- 2025全国农业(水产)行业职业技能大赛(水生物病害防治员)选拔赛试题库(含答案)
- 苏州市昆山市惠民物业管理有限公司招聘考试真题2024
- 模拟电子技术(山东联盟-山东建筑大学)知到智慧树期末考试答案题库2025年山东建筑大学
- 2025年中国膨润土猫砂项目投资可行性研究报告
- 给酒店提供早餐合同协议
- 2025华阳新材料科技集团有限公司招聘(500人)笔试参考题库附带答案详解
评论
0/150
提交评论