实现系统的基本数据访问.ppt
第六章 实现系统的 基本数据访问,章节任务,任务一:实现系统登录任务二:实现系统的数据备份 任务三:检索业主信息,章节目标,了解ADO.NET 结构了解ADO.NET 的组件掌握Connection 对象和Command对象的使用,6.1 ADO.NET 概述,ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。,1.引入ADO.NET的原因 越来越多的应用程序使用 XML来编码要通过网络连接传递的数据。Web 应用程序将 HTTP 用作在层间进行通讯的结构,因此它们必须显式处理请求之间的状态维护。而在客户端/服务器时代是连接、紧耦合的编程风格,此风格中的连接会在程序的整个生存期中保持打开,而不需要对状态进行特殊处理。在设计符合当今开发人员需要的工具和技术时,Microsoft 认识到需要为数据访问提供全新的编程模型,此模型是基于.NET框架生成的,这样就确保数据访问技术的一致性-组件将共享通用的类型系统、设计模式和命名约定。ADO.NET的出现就是为了满足这一新编程模型的以下需要:断开式数据结构、与 XML 的紧密集成、能够组合来自多个、不同数据源的数据的通用数据表示形式以及为与数据库交互而优化的功能,它们都是.NET框架固有的内容。,2.ADO.NET的结构 ADO.NET 由两个核心组件构成:DataSet 和.NET 数据提供程序,后者是一组包括 Connection、Command、DataReader 和 DataAdapter 对象在内的组件。ADO.NET DataSet 是 ADO.NET 的断开式结构的核心组件。DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关 DataTable 对象中数据的关系信息组成。,ADO.NET 结构的另一个核心元素是.NET数据提供程序,其组件的设计目的相当明确:为了实现数据操作和对数据的快速、只进、只读访问。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。可以为任何数据源编写.NET 数据提供程序。.NET 框架附带了两个.NET 数据提供程序:SQL Server.NET 数据提供程序和 OLE DB.NET 数据提供程序。,3.使用ADO.NET对数据库的访问 ADO.NET结构中,从数据库中提取所需数据的方式是:首先连接数据库,然后选择所需的数据,数据存储和数据库之间有一个起桥梁作用的数据适配器,再通过它将数据填写在数据存储中,用于保存并缓存数据的数据存储称为数据集,而数据适配器负责检索和更新数据集中的数据,以便使用断开式数据结构。最后,将数据显示在Windows窗体的控件中,如下图所示。,对于Insert,Update,Delete等单向操作,如图所示:对于数据查询,如图所示:, 数据提供程序, 数据提供程序简介ADO.NET提供了访问数据源的公共方法,对于不同的数据源,它采用不同的类库。这些类库称为.NET 数据提供程序(Data Providers)。.NET 数据提供程序可以连接到数据库、执行命令和检索结果。您可以直接处理检索到的结果,或将其放入 ADO.NET DataSet 对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。.NET 数据提供程序在设计上是轻量的,它在数据源和代码之间创建了一个最小层,以便在不以功能为代价的前提下提高性能。,组成.NET 数据提供程序的四个核心对象如下所列:Connection 建立与特定数据源的连接Command 对数据源执行命令。公开 Parameters,并且可以从 Connection 在 Transaction 的范围内执行DataReader 从数据源中读取只进且只读的数据流DataAdapter 用数据源填充 DataSet 并解析更新,数据提供程序的组成对象及其使用.net数据提供程序包括Connection对象、Command对象、DataReader对象及DataAdapter对象,本小节介绍Connection对象、Command对象及DataReader对象。,(1)什么是Connection对象要访问一个数据源,你必须先建立一个到它的连接。这个连接里描述了数据库服务器类型、数据库名字、用户名、密码,和连接数据库所需要的其它参数。command对象通过使用connection对象来知道是在哪个数据库上面执行SQL命令。Connection对象是.NET数据提供程序用户的起点。在程序中,必须确保先创建和打开 Connection,然后才可以执行Command。,(2)Connection对象常用的属性和方法Connection对象的常用属性、方法如下所示:ConnectionString 连接字符串,说明所连接数据库的服务器名称、数据库名称及登录的用户名和密码Open()打开数据库连接Close()关闭数据库连接,(3)Connection对象的连接方式:.NET框架包含几个命名空间,其中有几十个类可用于数据库访问,这些类非常相似。下面列出了包含在ADO.NET中的数据提供程序特定的命名空间及对应的数据库连接类。,2.Command对象(1)Command对象做什么 连接数据库后就可以开始想要执行的数据库操作,这个是通过command对象完成。command对象一般被用来发送SQL语句给数据库,通过connection对象得知道应该与哪个数据库进行连接。Command对象负责生成一个请求,并将其传递到数据源,如果返回结果,则Command对象会负责以DataReader、标量值或参数的形式来返回结果。Command执行 ExecuteReader方法可按DataReader形式返回结果集(或多个结果集),执行ExecuteScalar 方法可按标量值形式返回结果,而执行ExecuteNonQuery方法则可在数据源中处理不返回结果集但可能会返回参数的命令。,(2)Command对象的常用属性和方法 Command对象常用的属性和方法如下所列:CommandText:Command执行的内容,可以是 SQL语名或者存储过程名称CommandType:命令类型Connection:所使用的Connection对象ExecuteNonQuery():返回受影响的行数ExecuteReader():返回DataReader类型值ExecuteScalar():返回第一行第一列,(3)Command对象的使用方式 Command对象的使用方式有两种:命令文本方式和存储过程方式。命令文本方式下,用SQL语句的Command设置为:SqlCommand objComm=new SqlCommand();objComm.CommandText=SQL 语句;objComm.CommandType=CommandType.Text;objComm.Connection=objConnection;存储过程方式下,用存储过程的Command设置为:SqlCommand objComm=new SqlCommand();objComm.CommandText=“sp_DeleteName;objComm.CommandType=CommandType.StoredProcedure;objComm.Connection=objConnection;,(4)如何使用Command 对象 使用 Command 对象检索数据库的步骤如下图,使用 Command 对象更改数据库的步骤如下图,(5)存储过程存储过程提供了数据驱动应用程序中的许多优点。利用存储过程,数据库操作可以封装在单个命令中,为获取最佳性能而进行优化并通过附加的安全性得到增强。使用ADO.NET Command对象的Parameters集合,可以显式地定义存储过程参数并访问输出参数和返回值。,(6)事务 事务是一组组合成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将控制和维护每个数据库的一致性和完整性。一个事务由一系列 SQL SELECT、INSERT、UPDATE 或 DELETE 语句组成。如果在事务过程中没有遇到错误,事务中的所有修改都将永久成为数据库的一部分。如果遇到错误,则不会对数据库作出任何修改。基本的事务命令有三个:BEGIN、COMMIT 和 ROLLBACK。BEGIN 语句标记事务的开始。在 BEGIN 语句后尝试执行的所有过程都将被视为事务的一部分,而 COMMIT 语句用于完成事务,ROLLBACK 语句用于取消事务。,在ADO.NET中,可以使用Connection和Transaction对象来控制事务。若要执行事务,需执行下列操作:(1)调用Connection对象的BeginTransaction方法来标记事务的开始。BeginTransaction 返回对Transaction的引用。要保留此引用,以便将其分配给在事务中登记的Command。(2)将Transaction对象分配给要执行的Command的Transaction属性。如果通过活动的Transaction对象对Connection执行Command,但该Transaction对象尚未分配给Command的Transaction属性,则将引发异常。(3)执行所需的命令。(4)调用 Transaction 对象的 Commit 方法来完成事务,或调用 Rollback 方法来取消事务。,3.DataReader根据经验,许多数据库操作要求我们仅仅只是需要读取一组数据。这时候就用到了data reader对象。通过DataReader对象,我们可以获得从Command对象的SELECT语句得到的结果。考虑到性能方面的因素,DataReader返回的数据流被设计为只读的、单向的,这将意味着你只能按照一定的顺序从数据流中取出数据。虽然你在这里也获得了性能上的提升,但是缺点也是明显的,不能够操作取回数据,如果需要操作编辑数据,解决的办法是使用DataSet。DataReader的实现必须提供两项功能:以只进方式访问通过执行 Command 获取的一个或多个结果集;访问每个行中的列值,如后图示。,DataReader常用的属性及方法如下所示:FieldCount:返回当前行中的列数HasRows:容纳一个指示读取器是否含有一行或多行的值IsClosed:表示 DataReader 是否关闭RecordsAffected:表示执行 SQL 语句之后修改、插入或删除的行数Close():用于关闭 DataReader 对象GetBoolean():用于获取特定列的布尔值GetInt32():用于返回列的整型值GetName():返回指定列的名称NextResult():执行一批SQL语句时,用于将DataReader移到下一个SQL语句的结果处Read():使DataReader前进到下一个记录,不同的数据提供程序,使用不同的DataReader类,如下是对应关系。SQL 数据提供程序-SqlDataReaderOLE DB 数据提供程序-OleDbDataReaderOracle 数据提供程序-OracleDataReaderODBC 数据提供程序-OdbcDataReader,数据提供程序的命名.net 数据提供程序通常是以数据源的类型以及协议来命名的。下面列出了常见的一些数据提供程序所使用的前缀和交互的数据源类型。Odbc:提供ODBC接口的数据源。一般是比较老的数据库OleDb:提供OleDb接口的数据源,比如Access或Excel。Oracle:Oracle数据库Sql:Microsoft SQL Server数据库Bdp:通用的访问方式能访问许多数据库,比如Interbase、SQL Server、IBM DB2和Oracle,综合实例 实现系统的登录、备份及信息检索,小结,ADO.NET是用于和数据源打交道的.NET技术。它包含了许多的Data Providers,分别用于访问不同的数据源,这取决于它们所使用的数据库或者协议。然而无论使用什么样的Data Provider,与数据源进行交互的的对象的使用方法都是相似的。SqlConnection对象用于管理与数据源的连接。SqlCommand对象可以向数据源发送SQL命令。SqlDataReader可以快速的从数据源获得只读的,向前的数据流。使用DataSet可以处理那些已经断开的数据(储存在内存中的),并通过SqlDataAdapter实现数据源的读取和写入。,