ADO.NET数据访问技术.ppt_第1页
ADO.NET数据访问技术.ppt_第2页
ADO.NET数据访问技术.ppt_第3页
ADO.NET数据访问技术.ppt_第4页
ADO.NET数据访问技术.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第16章 ADO.NET数据访问技术,在目前的主流软件开发中,信息管理或处理系统占据了主要方面,所以几乎所有平台都支持数据库访问技术,.NET平台自然也不例外。ADO.NET是.NET框架中的一个重要组件,以一种统一的访问方式来连接多种形式的数据源,其中最常见的就是关系型数据库。ADO.NET采用相同的方法访问本地数据库、客户机/服务器数据库和基于Internet的高度分布式数据库。本章讲述.NET开发技术中应用非常广泛的核心开发技术ADO.NET数据访问技术。,章节内容,16.1 数据库开发基础 16.2 使用ADO.NET 16.3 ADO.NET综合应用 16.4 实例:图书信息管理,16.1 数据库开发基础,16.1.1 SQL Server 2005 SQL Server是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台,用于企业数据管理和商业智能应用。,使用SQL Server 2005创建数据库,首先建立数据库,之后添加表结构和为表添加列。,最后可以直接为表添加数据。,16.1.2 SQL语句简介,SQL全称是结构化查询语言(Structured Query Language),是数据库中使用的标准数据查询语言。 目前,绝大多数流行的关系型数据库管理系统都采用了SQL语言标准。虽然对SQL语句进行了再开发和扩展,但是包括Select、 Insert、Update、Delete、Create以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。,Insert,Insert操作用于向数据库表中插入记录。 INSERT INTO table (column ,column) VALUES (columnvalue ,columnvalue);,下面语句是向BookInfo表中插入一行记录。 INSERT INTO BookInfo VALUES (9787040074949, 数据库系统概论, 萨师煊, 高等教育出版社,28.0, 2000-2-1);,Select,Select操作从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。SELECT语句的结果通常是生成另外一个表。 SELECT columns FROM tables ORDERE BY column ASC|DESC WHERE predicates,下面语句将查询BookInfo表中作者谭浩强的书。 SELECT Name FROM BookInfo WHERE Author= 谭浩强,UPDATE,UPDATE语句允许用户在已知的表中对现有的行进行修改。 例如,下面语句是一个单行更新。 UPDATE BookInfo SET Name= C语言程序设计(第三版) WHERE ISBN=9787302108535,DELETE,DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。 例如,下面语句将删除所有清华出版社的书的信息。 DELETE FROM BookInfo WHERE press= 清华出版社,16.2 使用ADO.NET,ADO.NET目前版本为3.0,用于访问和操作数据的两个主要组件是.NET Framework数据提供程序和DataSet。,16.2.1 理解数据提供者,ADO.NET用不同的数据提供者来操作不同数据源 数据提供者实际上是ADO.NET提供的一组封装好的类,用于操作不同类型的数据库系统。我们可以把这些数据提供者想象成我们程序与数据库之间的一座桥梁,我们的程序通过它和数据库打交道。,4种数据提供者,SQL Server数据提供者:为操作SQL Server数据库(SQL Server 7.0及之后版本)提供完善的支持。 OLE DB数据提供者:为所有支持OLE DB驱动的数据源提供支持,它可以支持SQL Server 7.0之前的版本。 Oracle数据提供者:为操作Oracle数据库(8i及之后版本)提供完善的支持。 ODBC数据提供者:为操作Access数据库及其他支持ODBC驱动的数据源提供支持。,命名空间,我们需要根据所使用数据库系统的不同,选择相对应的数据提供者,并在代码中包含相应的命名空间。,16.2.2 连接数据库,ADO.NET中使用Connection类完成数据库的连接。只有建立了连接之后,才能对数据库表中的记录进行添加、删除、修改、读取之类的功能。,数据库连接字符串,要建立一个数据库连接,首先需要提供一个连接字符串。连接字符串的格式是一个以分号为界,划分键值参数对的列表。 这个串中包含了数据库的位置,想要连接的数据库的名称以及数据库的身份验证方式等众多的信息。必须提供的信息有以下3个。 数据库所在服务器的位置(Data Source)。 数据库的名称(Initial Catalog)。 数据库的身份验证方式(Windows集成验证或者是SQL Server身份验证)。,下面是一个用于连接16.1.2节创建的SQL Server数据库VBNET2008的连接字符串,采用Windows集成验证的方式。 Dim connectionString As String= “Data Source=localhost; Initial Catalog= VBNET2008;Integrated Security=SSPI;“,关于更多的数据库连接字符串,可参考。,连接字符串确定后,需要将其传递给Connection类的实例的ConnectionString属性,然后调用其Open方法打开该连接。这里以SqlConnection类为例。 1 Dim connectionString As String = “Data Source=server;Initial Catalog=VBNET2008; Integrated Security=SSPI;“ 2 Dim conn As SqlConnection= new SqlConnection( ) 3 conn.ConnectionString = cString 4 conn.Open( ),将连接字符串写入配置文件,如果是Windows窗体应用程序,则需要先添加该配置文件。单击菜单栏中的【项目】【添加新项】,打开【添加新项-WindowsApplication1】窗口,选择常规类别中的应用程序配置文件。,在app.configue文件中加入一个connectionStrings标签,代码如下。 1 2 3 4 5 6 7 ,使用配置文件中的连接字符串,可以通过ConfigurationManager.ConnectionStrings集合通过名字将其取出。使用该集合,首先要添加System.Configuration命名空间的引用。,下面代码通过ConfigurationManager.ConnectionStrings集合取出了连接字符串。 Dim conn string As String = 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项信息,代码如下。 1 Dim cmd As SqlCommand = new SqlCommand( ) 2 cmd.Connection = con 3 cmd.CommandType = CommandType.Text 4 cmd.CommandText = “SELECT * FROM BookInfo“ 事实上,上面代码还可以写成更简洁的形式,如下。 Dim cmd As SqlCommand = new SqlCommand(“SELECT * FROM BookInfo “, con),如果需要执行存储过程,如果需要执行存储过程,可以使用下面这种方式。 Dim cmd As SqlCommand = new SqlCommand(“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.4 DataReader,DataReader是一种非常有用的数据读取工具,提供一种连接着数据库、只能向前的记录访问方式,它可以执行SQL语句或者存储过程。 DataReader是一个轻量级的数据对象,如果只是需要将数据读出并显示的话,那么它就是最合适的工具 DataReader在读取数据的时候要求数据库保持在连接状态,读完数据之后才能断开连接。,DataReader的常用方法,示例,1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 2 创建Connection对象和Command对象 3 Dim connectionString As String = ConfigurationManager.ConnectionStrings(“MyConnectionString“).ConnectionString 4 Dim con As New SqlConnection(connectionString) 5 Dim cmd As New SqlCommand(“ SELECT * FROM BookInfo“, con) 6 Dim reader As SqlDataReader,7 Try 8 con.Open( ) 打开数据库连接 9 执行ExecuteReader( )方法返回的是一个DataReader对象 10 reader = cmd.ExecuteReader( ) 11 While reader.Read( ) 遍历DataReader时最常用的方式 12 Label1.Text &= reader(0) & vbTab & reader(1) & vbCrLf 按照顺序或列名指定要读取的项 13 End While 14 Catch ex As SqlException 15 Throw New ApplicationException(ex.ToString() 执行过程中发生异常的话,抛出异常 16 Finally 17 reader.Close( ) 关闭DataReader 18 con.Close( ) 断开数据库连接 19 End Try 20 End Sub,通过这段代码,我们得到了一个填充了数据的DataReader对象。在需要显示这些数据的地方,就可以通过读DataReader的方式来显示这些数据了。 Close方法可以关闭DataReader对象和数据源之间的联系。在读完数据之后务必把DataReader对象关闭,否则当DataReader对象尚未关闭时,DataReader所使用的Connection对象就无法执行其他操作。,16.2.5 DataSet与DataAdapter,DataSet是实现基于非连接的数据查询的核心组件。可以将DataSet看成是一个数据容器,将数据库中的数据拷贝了一份放到了用户本地的内存中,供用户在不连接数据库的情况下读取数据, DataSet对象表示数据库中数据的缓存,具有类似数据库的结构,如表、列、关系和约束等。,下面代码创建了一个DataSet,创建时可以选择指定一个名称参数。如果没有为DataSet指定名称,则该名称会设置为“NewDataSet”。 Dim books As DataSet = New DataSet(“Books“),DataAdapter类,使用DataSet,就一定会用到DataAdapter类。这也是一个非常常用的类,因为DataSet必须通过DataAdapter才能得到数据。 因为DataSet并不能直接跟数据源产生联系,这种联系必须通过DataAdapter来完成。,DataAdapter对象的工作步骤,一般有两种。 一种是通过Command对象执行SQL语句,将获得的结果集填充到DataSet对象中; 另一种是将DataSet里更新数据的结果返回到数据库中。,DataAdapter的常用方法,Fill方法:用于填充或刷新DataSet。 Update方法:将DataSet中的数据更新到数据库里。,16.3 ADO.NET综合应用,应用背景:某学院的图书资料室需要设计一个图书信息管理的程序,能够显示该资料室的图书的信息,并实现对图书的添加、删除、更新,并且可以对图书进行查询。,数据库表结构,分层逻辑,真正进行项目开发时,我们并不会把对数据库的操作代码嵌入到业务逻辑代码中。它们一般都是分开存放的。 当逻辑代码需要数据的时候,它通过调用专门的数据库操作代码来得到这些数据。 这个可以简单的理解成业务的分层:不同的代码负责不同的功能,互不干扰。这样做对代码的维护和代码的重用都非常的有利。,到目前为止比较成熟并被众多开发者所采用的是这样一种模式: 为数据库中每一个主要的表配置一个专门的数据信息类,这个类中包含这个表中的数据信息。 另外为这个表提供一组它要用到的方法,如保存数据、删除数据、更新数据等方法,将这些方法也封装在一个类中。,与BookInfo表对应的数据类,这个数据类非常简单,每个属性都与数据表中的一项对应。,数据库操作类,1 Public Class BookInfoDB 2 3 End Class 这个类暂时是空的,下面所有针对数据库表BookInfo的操作,我们都会添加到这个类中。,16.3.1 连接数据库,首先在项目中添加应用程序配置文件app.config,在该配置文件中配置上连接字符串 1 2 3 ,将这个字符串定义成一个全局变量,这样整个类中需要用到它的地方都可以方便的调用。 常见的方式是将这个获取字符串内容的代码放到数据操作类的构造函数中。 1 Public Class BookInfoDB 2 Public connectionString As String 3 Public Sub New( ) 4 connectionString = System.Configuration.ConfigurationManager.ConnectionStrings(“Book “).ConnectionString 5 End Sub 6 End Class,16.3.2 查询数据,在BookInfoDB类中添加GetBooks( )的函数,用于查询所有图书的信息。 1 批量查询 2 Public Function GetBooks( ) As DataSet 3 Dim con As New SqlConnection(connectionString) 4 Dim ds As New DataSet( ) 5 假设我们想要得到所有的图书信息 6 Dim cmd As New SqlCommand(“SELECT * FROM BookInfo“, con) 7 Dim adp As New SqlDataAdapter(cmd) 8 Try 9 con.Open( ) 10 adp.Fill(ds) 将数据填充到DataSet中 11 Catch ex As SqlException 12 Throw New ApplicationException(“Data error.“) 执行过程中发生异常的话,抛出异常 13 Finally 14 con.Close() 关闭数据库连接 15 End Try 16 Return ds 返回数据集 17 End Function,查询单条数据需要首先指定我们想要得到哪条学生信息。这里我们通过指定图书的名称来确定具体的那条记录。 1 单个查询 2 Public Function GetBookByName(ByVal name As String) As BookDetails 3 定义BookDetails对象,用于存储图书信息 4 Dim book As New BookDetails 5 Dim reader As SqlDataReader 6 Dim con As New SqlConnection(connectionString) 7 Dim cmd As New SqlCommand(“, con) 8 cmd.CommandText = “SELECT * FROM BookInfo WHERE Name=“ & name & “ 9 Try 10 con.Open( ) 11 调用Command对象的ExecuteReader方法 12 reader = cmd.ExecuteReader( ) 13 循环读取所有数据,实际上这里只有一条记录,14 While reader.Read 15 根据列名取出不同列的数据 16 book.ISBN = reader(“ISBN“) 17 book.Name = reader(“Name“) 18 book.Author = reader(“Author“) 19 book.Press = reader(“Press“) 20 book.Price = reader(“Price“) 21 book.PressDate = reader(“PressDate“) 22 End While 23 reader.Close( ) 24 Catch ex As SqlException 25 如果读取数据过程中发生异常的话,将book对象设置成空

温馨提示

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

评论

0/150

提交评论