ADO.NET数据访问技术.ppt_第1页
ADO.NET数据访问技术.ppt_第2页
ADO.NET数据访问技术.ppt_第3页
ADO.NET数据访问技术.ppt_第4页
ADO.NET数据访问技术.ppt_第5页
免费预览已结束,剩余57页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第16章ADO.NET数据访问技术,在目前的主流软件开发中,信息管理或处理系统占据了主要方面,所以几乎所有平台都支持数据库访问技术,.NET平台自然也不例外。ADO.NET是.NET框架中的一个重要组件,以一种统一的访问方式来连接多种形式的数据源,其中最常见的就是关系型数据库。ADO.NET采用相同的方法访问本地数据库、客户机/服务器数据库和基于Internet的高度分布式数据库。本章讲述.NET开发技术中应用非常广泛的核心开发技术ADO.NET数据访问技术。,章节内容,16.1数据库开发基础16.2使用ADO.NET16.3ADO.NET综合应用16.4实例:图书信息管理,16.1数据库开发基础,16.1.1SQLServer2005SQLServer是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台,用于企业数据管理和商业智能应用。,使用SQLServer2005创建数据库,首先建立数据库,之后添加表结构和为表添加列。,最后可以直接为表添加数据。,16.1.2SQL语句简介,SQL全称是结构化查询语言(StructuredQueryLanguage),是数据库中使用的标准数据查询语言。目前,绝大多数流行的关系型数据库管理系统都采用了SQL语言标准。虽然对SQL语句进行了再开发和扩展,但是包括Select、Insert、Update、Delete、Create以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。,Insert,Insert操作用于向数据库表中插入记录。INSERTINTOtable(column,column)VALUES(columnvalue,columnvalue);,下面语句是向BookInfo表中插入一行记录。INSERTINTOBookInfoVALUES(9787040074949,数据库系统概论,萨师煊,高等教育出版社,28.0,2000-2-1);,Select,Select操作从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。SELECT语句的结果通常是生成另外一个表。SELECTcolumnsFROMtablesORDEREBYcolumnASC|DESCWHEREpredicates,下面语句将查询BookInfo表中作者谭浩强的书。SELECTNameFROMBookInfoWHEREAuthor=谭浩强,UPDATE,UPDATE语句允许用户在已知的表中对现有的行进行修改。例如,下面语句是一个单行更新。UPDATEBookInfoSETName=C语言程序设计(第三版)WHEREISBN=9787302108535,DELETE,DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。例如,下面语句将删除所有清华出版社的书的信息。DELETEFROMBookInfoWHEREpress=清华出版社,16.2使用ADO.NET,ADO.NET目前版本为3.0,用于访问和操作数据的两个主要组件是.NETFramework数据提供程序和DataSet。,16.2.1理解数据提供者,ADO.NET用不同的数据提供者来操作不同数据源数据提供者实际上是ADO.NET提供的一组封装好的类,用于操作不同类型的数据库系统。我们可以把这些数据提供者想象成我们程序与数据库之间的一座桥梁,我们的程序通过它和数据库打交道。,4种数据提供者,SQLServer数据提供者:为操作SQLServer数据库(SQLServer7.0及之后版本)提供完善的支持。OLEDB数据提供者:为所有支持OLEDB驱动的数据源提供支持,它可以支持SQLServer7.0之前的版本。Oracle数据提供者:为操作Oracle数据库(8i及之后版本)提供完善的支持。ODBC数据提供者:为操作Access数据库及其他支持ODBC驱动的数据源提供支持。,命名空间,我们需要根据所使用数据库系统的不同,选择相对应的数据提供者,并在代码中包含相应的命名空间。,16.2.2连接数据库,ADO.NET中使用Connection类完成数据库的连接。只有建立了连接之后,才能对数据库表中的记录进行添加、删除、修改、读取之类的功能。,数据库连接字符串,要建立一个数据库连接,首先需要提供一个连接字符串。连接字符串的格式是一个以分号为界,划分键值参数对的列表。这个串中包含了数据库的位置,想要连接的数据库的名称以及数据库的身份验证方式等众多的信息。必须提供的信息有以下3个。数据库所在服务器的位置(DataSource)。数据库的名称(InitialCatalog)。数据库的身份验证方式(Windows集成验证或者是SQLServer身份验证)。,下面是一个用于连接16.1.2节创建的SQLServer数据库VBNET2008的连接字符串,采用Windows集成验证的方式。DimconnectionStringAsString=DataSource=localhost;InitialCatalog=VBNET2008;IntegratedSecurity=SSPI;,关于更多的数据库连接字符串,可参考。,连接字符串确定后,需要将其传递给Connection类的实例的ConnectionString属性,然后调用其Open方法打开该连接。这里以SqlConnection类为例。1DimconnectionStringAsString=DataSource=server;InitialCatalog=VBNET2008;IntegratedSecurity=SSPI;2DimconnAsSqlConnection=newSqlConnection()3conn.ConnectionString=cString4conn.Open(),将连接字符串写入配置文件,如果是Windows窗体应用程序,则需要先添加该配置文件。单击菜单栏中的【项目】【添加新项】,打开【添加新项-WindowsApplication1】窗口,选择常规类别中的应用程序配置文件。,在app.configue文件中加入一个connectionStrings标签,代码如下。1234567,使用配置文件中的连接字符串,可以通过ConfigurationManager.ConnectionStrings集合通过名字将其取出。使用该集合,首先要添加System.Configuration命名空间的引用。,下面代码通过ConfigurationManager.ConnectionStrings集合取出了连接字符串。DimconnstringAsString=ConfigurationManager.ConnectionStrings(MyConnectionString).ConnectionString,如果是ASP.NET项目,则可以将数据库连接字符串写入Web.Config文件。方式与Windows窗体应用程序中的app.config文件类似,添加一个connectionstring标签即可。在需要用到连接字符串的时候,可以从WebConfigurationManager.ConnectionStrings集合中通过名字将它取出来。要使用这个集合的话,同样需要在项目中添加对System.Configuration命名空间的引用。,16.2.3执行数据库操作,.NET中执行数据库操作是通过Command类来完成的。Command类是一个执行SQL语句和存储过程的类。通过它,我们可以实现对数据的添加、删除、更新、查询等各种操作。,使用Command类,首先要确定Command的种类,是SqlCommand,OracleCommand,还是其他类型。在确定了Command类型之后,需要把为它指定一个Connection。另外需要指定CommandType和CommandText。这3项信息可以在创建Command对象的时候以参数的形式传到Command的构造函数中,也可以通过属性的方式进行设置。,需要说明的是,CommandText既可以是SQL语句,也可以是存储过程,也可以是数据表的名字。使用不同种类的CommandText,需要设置相应的CommandType。,3种不同的CommandType,如果需要执行SQL语句,下面的代码演示了如何使用SqlCommand对象执行一个SQL查询语句,采用了属性设置的方式指定了必须的3项信息,代码如下。1DimcmdAsSqlCommand=newSqlCommand()2cmd.Connection=con3cmd.CommandType=CommandType.Text4cmd.CommandText=SELECT*FROMBookInfo“事实上,上面代码还可以写成更简洁的形式,如下。DimcmdAsSqlCommand=newSqlCommand(SELECT*FROMBookInfo,con),如果需要执行存储过程,如果需要执行存储过程,可以使用下面这种方式。DimcmdAsSqlCommand=newSqlCommand(GetBooks,con)cmd.CommandType=CommandType.StoredProcedure,至此,我们只是简单地定义出了Command对象,并为它们设置了一些属性,但还并没有真正的执行这些操作。如果想要执行Command操作的话,还需要调用其他方法来执行。我们有3种方法可以使用,这3种方法的主要不同之处在于它们的返回值不同。,三种执行方法,ExecuteNonQuery():用于执行非SELECT的命令,如INSERT,DELETE或者UPDATE命令,返回一个命令所影响的数据的行数。也可以用ExecuteNonQuery()方法来执行一些数据定义命令,如新建,更新,删除数据库对象(如表,索引等)。ExecuteScalar():用于执行SELECT查询命令,返回数据中第一行第一列的值。这个方法通常用来执行那些用到COUNT()或者SUM()函数的SELECT命令。ExecuteReader():用于执行SELECT命令,并返回一个DataReader对象。这个DataReader是前向只读的数据集。,16.2.4DataReader,DataReader是一种非常有用的数据读取工具,提供一种连接着数据库、只能向前的记录访问方式,它可以执行SQL语句或者存储过程。DataReader是一个轻量级的数据对象,如果只是需要将数据读出并显示的话,那么它就是最合适的工具DataReader在读取数据的时候要求数据库保持在连接状态,读完数据之后才能断开连接。,DataReader的常用方法,示例,1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load2创建Connection对象和Command对象3DimconnectionStringAsString=ConfigurationManager.ConnectionStrings(MyConnectionString).ConnectionString4DimconAsNewSqlConnection(connectionString)5DimcmdAsNewSqlCommand(SELECT*FROMBookInfo,con)6DimreaderAsSqlDataReader,7Try8con.Open()打开数据库连接9执行ExecuteReader()方法返回的是一个DataReader对象10reader=cmd.ExecuteReader()11Whilereader.Read()遍历DataReader时最常用的方式12Label1.Text&=reader(0)&vbTab&reader(1)&vbCrLf按照顺序或列名指定要读取的项13EndWhile14CatchexAsSqlException15ThrowNewApplicationException(ex.ToString()执行过程中发生异常的话,抛出异常16Finally17reader.Close()关闭DataReader18con.Close()断开数据库连接19EndTry20EndSub,通过这段代码,我们得到了一个填充了数据的DataReader对象。在需要显示这些数据的地方,就可以通过读DataReader的方式来显示这些数据了。Close方法可以关闭DataReader对象和数据源之间的联系。在读完数据之后务必把DataReader对象关闭,否则当DataReader对象尚未关闭时,DataReader所使用的Connection对象就无法执行其他操作。,16.2.5DataSet与DataAdapter,DataSet是实现基于非连接的数据查询的核心组件。可以将DataSet看成是一个数据容器,将数据库中的数据拷贝了一份放到了用户本地的内存中,供用户在不连接数据库的情况下读取数据,DataSet对象表示数据库中数据的缓存,具有类似数据库的结构,如表、列、关系和约束等。,下面代码创建了一个DataSet,创建时可以选择指定一个名称参数。如果没有为DataSet指定名称,则该名称会设置为“NewDataSet”。DimbooksAsDataSet=NewDataSet(Books),DataAdapter类,使用DataSet,就一定会用到DataAdapter类。这也是一个非常常用的类,因为DataSet必须通过DataAdapter才能得到数据。因为DataSet并不能直接跟数据源产生联系,这种联系必须通过DataAdapter来完成。,DataAdapter对象的工作步骤,一般有两种。一种是通过Command对象执行SQL语句,将获得的结果集填充到DataSet对象中;另一种是将DataSet里更新数据的结果返回到数据库中。,DataAdapter的常用方法,Fill方法:用于填充或刷新DataSet。Update方法:将DataSet中的数据更新到数据库里。,16.3ADO.NET综合应用,应用背景:某学院的图书资料室需要设计一个图书信息管理的程序,能够显示该资料室的图书的信息,并实现对图书的添加、删除、更新,并且可以对图书进行查询。,数据库表结构,分层逻辑,真正进行项目开发时,我们并不会把对数据库的操作代码嵌入到业务逻辑代码中。它们一般都是分开存放的。当逻辑代码需要数据的时候,它通过调用专门的数据库操作代码来得到这些数据。这个可以简单的理解成业务的分层:不同的代码负责不同的功能,互不干扰。这样做对代码的维护和代码的重用都非常的有利。,到目前为止比较成熟并被众多开发者所采用的是这样一种模式:为数据库中每一个主要的表配置一个专门的数据信息类,这个类中包含这个表中的数据信息。另外为这个表提供一组它要用到的方法,如保存数据、删除数据、更新数据等方法,将这些方法也封装在一个类中。,与BookInfo表对应的数据类,这个数据类非常简单,每个属性都与数据表中的一项对应。,数据库操作类,1PublicClassBookInfoDB23EndClass这个类暂时是空的,下面所有针对数据库表BookInfo的操作,我们都会添加到这个类中。,16.3.1连接数据库,首先在项目中添加应用程序配置文件app.config,在该配置文件中配置上连接字符串123,将这个字符串定义成一个全局变量,这样整个类中需要用到它的地方都可以方便的调用。常见的方式是将这个获取字符串内容的代码放到数据操作类的构造函数中。1PublicClassBookInfoDB2PublicconnectionStringAsString3PublicSubNew()4connectionString=System.Configuration.ConfigurationManager.ConnectionStrings(Book).ConnectionString5EndSub6EndClass,16.3.2查询数据,在BookInfoDB类中添加GetBooks()的函数,用于查询所有图书的信息。1批量查询2PublicFunctionGetBooks()AsDataSet3DimconAsNewSqlConnection(connectionString)4DimdsAsNewDataSet()5假设我们想要得到所有的图书信息6DimcmdAsNewSqlCommand(SELECT*FROMBookInfo,con)7DimadpAsNewSqlDataAdapter(cmd)8Try9con.Open()10adp.Fill(ds)将数据填充到DataSet中11CatchexAsSqlException12ThrowNewApplicationException(Dataerror.)执行过程中发生异常的话,抛出异常13Finally14con.Close()关闭数据库连接15EndTry16Returnds返回数据集17EndFunction,查询单条数据需要首先指定我们想要得到哪条学生信息。这里我们通过指定图书的名称来确定具体的那条记录。1单个查询2PublicFunctionGetBookByName(ByValnameAsString)AsBookDetails3定义BookDetails对象,用于存储图书信息4DimbookAsNewBookDetails5DimreaderAsSqlDataReader6DimconAsNewSqlConnection(connectionString)7DimcmdAsNewSqlCommand(,con)8cmd.CommandText=SELECT*FROMBookInfoWHEREName=&name&9Try10con.Open()11调用Command对象的ExecuteReader方法12reader=cmd.ExecuteReader()13循环读取所有数据,实际上这里只有一条记录,14Whilereader.Read15根据列名取出不同列的数据16book.ISBN=reader(ISBN)17book.Name=reader(Name)18book.Author=reader(Author)19book.Press=reader(Press)20book.Price=reader(Price)21book.PressDate=reader(PressDate)22EndWhile23reader.Close()24CatchexAsSqlE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论