数据访问编程基础.ppt
《数据访问编程基础.ppt》由会员分享,可在线阅读,更多相关《数据访问编程基础.ppt(144页珍藏版)》请在三一办公上搜索。
1、南京理工大学计算机学院,1,1,第5章 数据访问编程基础,南京理工大学计算机学院,2,5.1 分布式应用程序和数据集成简介,南京理工大学计算机学院,3,ADO.NET数据访问,System.Data名称空间是构造.NET框架数据库应用程序的基础,其中包含组成ADO.NET 结构的大部分类。ADO.NET 结构使得所创建的组件能够更高效地管理来自不同数据源中的数据。ADO.NET结构的中心为Dataset类。每个Dataset中都包含多个 DataTable 对象,而 DataTable对象,则包含来自某个数据源的数据。每个DataTable中都包含一个ColumnsCollection(Dat
2、aColumn对象的集合),这确定了DataTable的结构。DataColumn对象的DataType属性代表数据类型;使用Readonly和AllowNull属性可以进一步确定数据的完整性;使用Expression属性可以构造用于计算输出的列。,南京理工大学计算机学院,4,ADO.NET使用离线数据结构,在传统的客户/服务器应用程序中,组件将建立与数据库的连接,并在应用程序运行过程中使连接保持打开状态。出于各种原因,该方法在许多应用程序中是不实用的:打开的数据库连接占用宝贵的系统资源。需要打开的数据库连接的应用程序极难按比例扩展。Web应用程序尤其需要便于缩放,因为Web站点的通信量可能会
3、在非常短的时期内按数量级增加。在Web应用程序中,组件彼此之间本来就是不连接的。基于连接数据的模型可能使得使用连接结构在应用程序和组织边界之间交换数据变得困难且不实际。,南京理工大学计算机学院,5,ADO.NET使用离线数据结构,ADO.NET数据访问是以离线结构为基础进行设计的。应用程序连接到数据库的时间仅足够获取或更新数据。由于数据库并未被大部分时间空闲的连接占用,所以它可以为更多用户服务。操作连接数据有时也很有用。例如,在执行大量更新,且可能存在记录争用的应用程序中,连接数据结构可能十分重要。,南京理工大学计算机学院,6,数据被缓存到数据集内,最常见的数据任务是从数据库检索数据并对数据进
4、行某些操作:显示数据、处理数据或将数据发送给另一个组件。应用程序需要经常处理不止一条记录,而是一组记录,通常应用程序所需的该组记录来自多个表。在不连接的数据模型中,每次应用程序需要处理下一条记录时都连接回数据库是不可行的(这样做会大大消除使用不连接数据的优越性)。因此解决方案是临时存储从数据库检索的记录,然后使用该临时集-数据集。数据集是从数据库检索的记录缓存。它的工作方式如同虚拟的数据存储区:数据集包含一个或多个表(这些表基于实际数据库中的表),并且它可以包含有关这些表之间的关系和临时表可包含数据的约束的信息。,南京理工大学计算机学院,7,数据被缓存到数据集内,数据集内的数据通常是数据库中内
5、容非常精简的版本。但是,可以用与操作实际数据十分类似的方式操作数据集。这样在操作时将保持与数据库的不连接状态,使数据库可以自由执行其他任务。若要实际从数据库获取数据并(可选)将数据写回数据库,可使用数据适配器。数据适配器包含有关如何填充数据集内的单个表和更新数据库中相应表的说明。数据集实际上是数据库数据的私有副本,所以它不一定反映数据库的当前状态。如果想要查看其他用户进行的最新更改,可以通过调用适当的Fill方法刷新数据集。使用数据集的一个便利之处是组件可以根据需要交换数据集。中层的某个业务对象可以创建和填充一个数据集,然后将它发送给应用程序中其他位置处的另一个组件以供处理。该功能意味着组件不
6、必分别查询数据库。,南京理工大学计算机学院,8,数据集独立于数据源,数据集是作为从数据库获取的数据的缓存,但数据集与数据库之间没有任何实际关系。数据集是容器,它由从数据适配器执行的SQL命令或存储过程填充。由于数据集不直接绑定到数据源,所以它是来自多个源数据的好的集成点。数据集内的某些数据可能来自数据库,而它的其他部分可能来自另一个数据库或电子表格之类的非数据库源。数据集内的某些数据还可能来自另一个组件所发送的流。一旦数据在数据集内,则不管它的原始源是什么,都可以使用一致的对象模型对它进行操作。,南京理工大学计算机学院,9,数据以XML格式保存,数据需要从数据存储区移动到数据集,以及从数据集移
7、动到各种组件。在ADO.NET中,传输数据的格式是XML。在ADO.NET中,XML是数据的基本格式。ADO.NET数据API自动用数据集内的信息创建XML文件或流,并将它们发送给另一个组件;第二个组件可以调用类似的API将XML读回数据集。数据不以XML格式存储在数据集内(例如,能使用XML分析器分析数据集内的数据),而是以更有效的格式存储。,南京理工大学计算机学院,9,南京理工大学计算机学院,10,数据以XML格式保存,以XML为基础的数据协议提供许多便利之处:XML是工业标准格式。这意味着你的应用程序数据组件可以与其他任何应用程序中的其他任何组件交换数据,只要该组件理解XML。许多应用程
8、序被编写为可理解XML,为异类应用程序间交换提供了空前高的水平。XML是基于文本的。数据的XML表示形式不使用任何二进制信息,这使它可以通过任何协议(如HTTP)发送。大多数防火墙将阻塞二进制信息,但通过将信息格式化为XML,组件仍可以方便地交换信息。,南京理工大学计算机学院,10,南京理工大学计算机学院,11,数据结构定义,数据集以XML表示。数据集的结构(对数据集内有哪些表、列、数据类型、约束等的定义)使用XML架构进行定义。就像数据集包含的数据可以从XML加载和序列化为XML一样,数据集的结构也可以从XSD架构加载和序列化为XSD架构。对于对ADO.NET中的数据进行的大部分操作,你不必
9、深入钻研架构。通常,Visual Studio.NET将基于在可视化设计器中进行的操作,根据需要生成和更新架构。,南京理工大学计算机学院,11,南京理工大学计算机学院,12,南京理工大学计算机学院,12,5.2 ADO.NET的优越性,南京理工大学计算机学院,13,互操作性,ADO.NET应用程序可以利用XML的灵活性和广泛的兼容性。由于XML是用于在网络中传输数据集的格式,因此可以读取XML格式的任何组件都可以处理数据。实际上,接收组件根本不必是ADO.NET组件;传输组件可以只是将数据集传输给其目标,而不考虑接收组件的实现方式。唯一的要求是接收组件能够读取XML。作为一项工业标准,XML正
10、是在遵守这种互操作性的情况下设计的。,南京理工大学计算机学院,13,南京理工大学计算机学院,14,可维护性,当已配置的应用程序越来越受用户欢迎时,增加的性能负荷可能需要进行结构更改。随着已配置的应用程序服务器上的性能负荷的增长,系统资源会变得不足,并且响应时间或吞吐量会受到影响。面对该问题,软件设计者可以选择将服务器的业务逻辑处理和用户接口处理划分到单独计算机上的单独层上。实际上,应用程序服务器层将替换为两层,缓解了系统资源缺乏的压力。它是要在应用程序配置以后增加层数。如果原始应用程序使用数据集以ADO.NET实现,则该转换很容易进行。当用两层替换单个层时,将安排这两层交换信息。由于这些层可以
11、通过XML格式的数据集传输数据,所以通讯相对较容易。,南京理工大学计算机学院,14,南京理工大学计算机学院,15,可编程性,在Visual studio中使用ADO.NET的一个好处是:这些工具生成的数据类将产生已声明类型的数据集。而这又使用户可以通过已声明类型的编程访问数据。已声明类型的数据集的代码更易阅读。因为提供了语句约束,所以它还便于编写。最后,已声明类型的数据集的代码更安全,原因在于它提供对类型的编译时检查。,南京理工大学计算机学院,15,南京理工大学计算机学院,16,高性能,对于离线应用程序,ADO.NET数据库提供的性能优于ADO离线的记录集。当使用COM封送在层间传输不连接的记
12、录集时,会因将记录集内的值转换为COM可识别的数据类型而导致显著的处理开销。在ADO.NET中,这种数据类型转换则没有必要。,南京理工大学计算机学院,16,南京理工大学计算机学院,17,可缩放性,因为Web可以极大增加对数据的需求,所以可缩放性变得很关键。Internet应用程序具有无限的潜在用户。尽管应用程序可以很好地为十几个用户服务,但它可能无法为成百上千个(或几百万个)用户提供同样好的服务。使用数据库锁和数据库连接之类资源的应用程序不能很好地为大量用户服务,因为用户对这些有限资源的需求最终将超出其供应能力。ADO.NET通过鼓励程序员节省有限资源来实现可缩放性。由于所有ADO.NET应用
13、程序都使用对数据的不连接访问,因此它不会在较长持续时间内保留数据库锁或活动数据库连接。,南京理工大学计算机学院,17,南京理工大学计算机学院,18,南京理工大学计算机学院,18,5.3 ADO.NET和ADO的比较,南京理工大学计算机学院,19,数据在内存中的表示形式,在ADO中,数据的内存中表示形式为记录集;而在ADO.NET中它为数据集。1表的个数记录集看起来像单个表。如果记录集包含来自多个数据库表的数据,则它必须使用JOIN查询,将来自各个数据库表的数据组合到单个结果表中。数据集是一个或多个表的集合。数据集内的表称为数据表,明确地说,它们是DataTable对象。如果数据集包含来自多个数
14、据库表的数据,它通常将包含多个DataTable对象。即每个DataTable对象通常对应于单个数据库表或视图。这样,数据集就可以模仿基础数据库的结构。,南京理工大学计算机学院,19,南京理工大学计算机学院,20,数据在内存中的表示形式,2数据导航在ADO中,使用ADO MoveNext方法可以顺序扫描记录集的行。在ADO.NET中,行表示为集合,因此可以像依次浏览任何集合那样依次浏览表,或通过序号索引或主键索引访问特定行。,南京理工大学计算机学院,20,南京理工大学计算机学院,21,数据离线访问,在ADO中,记录集可以提供离线的访问,但它主要是为连接的访问设计的。ADO和ADO.NET中的不
15、连接处理之间存在一个显著差异。在ADO中,通过调用OLE DB提供程序来与数据库通讯。在ADO.NET中,通过数据适配器(OleDbData Adapter或SqlDataAdapter对象)与数据库通讯,这将调用由OLE DB提供者或DBMS提供的API。ADO和ADO.NET之间的重要差异:在ADO.NET中,数据适配器允许用户控制将对数据集所做的更改传输到数据库的方式,如实现性能优化、执行数据验证检查或另外进行其他任何额外处理。,南京理工大学计算机学院,21,南京理工大学计算机学院,22,应用程序间的数据共亨,要将ADO离线记录集从一个组件传输到另一个组件,应使用COM封送。若要将ADO
16、.NET数据集传输给另一个应用程序,则应使用XML传输流。相对于COM封送,XML文件传输提供以下便利之处。1更丰富的数据类型COM封送提供一组有限的数据类型(由COM标准定义的那些类型)。由于ADO.NET中的数据集传输基于XML格式,所以对数据类型没有限制。因此,共享数据集的组件可以使用任何丰富的数据类型集。,南京理工大学计算机学院,22,南京理工大学计算机学院,23,应用程序间的数据共亨,2性能传输大型ADO记录集或大型ADO.NET数据集会使用网络资源。随着数据量的增长,施加于网络的压力也在增加。ADO和ADO.NET都可以最大限度地降低所传输的数据。但ADO.NET还提供另一个性能优
17、势:ADO.NET不需要数据类型转换。而使用COM封送来在组件间传输记录集的ADO,则需要将ADO数据类型转换为COM数据类型。3穿透防火墙防火墙可以影响试图传输不连接ADO记录集的两个组件。需要注意的是,防火墙通常配置为允许HTML文本通过,但防止系统级请求(如COM封送)通过。因为组件使用XML交换ADO.NET数据库,所以防火墙可以允许数据集通过。,南京理工大学计算机学院,23,南京理工大学计算机学院,24,南京理工大学计算机学院,24,5.4 ADO.NET连接,南京理工大学计算机学院,25,ADO.NET连接设计工具介绍,若要在数据存储区和应用程序之间移动数据,必须首先拥有到该数据存
18、储区的连接。在ADO.NET中,可以使用以下两个连接对象之一创建和管理连接:SqlConnection该对象管理与SQL Server 7.0版或更高版本的连接。OleDbConnection该对象管理与可通过OLE DB访问的任何数据存储区的连接。它通过忽略OLE DB层(包括其他措施)对SqlConnection对象进行优化。,南京理工大学计算机学院,25,南京理工大学计算机学院,26,ADO.NET连接设计工具介绍,1连接字符串两种连接对象大致提供相同的成员。然而,对于给定OleDbConnection对象,可用的特定成员取决于它所连接到的数据源。并非所有数据源都支持OleDbConne
19、ction类的全部成员。与连接对象关联的主要属性是ConnectionString属性,它由带有属性值对的字符串(用于提供登录数据库和指向特定数据库所需的信息)组成。Provider=SQLOLEDB.l;Datasouce=MySQLServer;Initial Catalog=pubs;user ID=sa;password=sa;,南京理工大学计算机学院,26,南京理工大学计算机学院,27,ADO.NET连接设计工具介绍,2打开和关闭连接连接的两个主要方法是Open和Close。Open方法使用ConnectionString属性中的信息联系数据源并建立一个打开的连接。Close方法关闭
20、连接。关闭连接是必要的,因为大多数数据源只支持有限数目的打开的连接,因为打开的连接占用宝贵的系统资源。如果正在使用数据适配器或数据命令,则不必显式打开和关闭连接。,南京理工大学计算机学院,27,南京理工大学计算机学院,28,ADO.NET连接设计工具介绍,3池连接应用程序经常有多个用户执行相同类型的数据库访问。例如,在Web应用程序中可能有许多用户正在查询相同的数据库,以获取相同数据。在这些情况下,可以通过使应用程序共享到数据源的连接来提高应用程序的性能。否则,让每个用户打开和关闭单独连接的开销会对应用程序性能产生不利影响。如果使用的是OleDbConnection类,则连接池将由提供程序自动
21、处理,不必自己进行管理。如果使用的是SqlConnection类,则连接池被隐式管理,但也提供选项允许自己管理池。,南京理工大学计算机学院,28,南京理工大学计算机学院,29,ADO.NET连接设计工具介绍,4事务连接对象通过BeginTransaction方法支持事务,该方法创建事务对象(OleDbTransaction或SqlTransaction对象)。事务对象反过来支持提交或回滚事务的方法。事务必须通过代码进行管理。,南京理工大学计算机学院,29,南京理工大学计算机学院,30,ADO.NET连接设计工具介绍,5可配置的连接属性在许多应用程序中,连接信息无法在设计时确定。典型的策略是将连
22、接属性指定为动态属性,为用户提供一种方式(如Windows窗体或Web窗体页)来指定相关详细信息,然后更新配置文件。.NET框架中内置的动态属性机制会在读取属性时自动从配置文件获取相应值,并在更新值时更新配置文件。,南京理工大学计算机学院,30,南京理工大学计算机学院,31,ADO.NET连接设计工具介绍,6连接信息和安全性通过内在的ASP.NET安全模型,可以保护Web应用程序的二进制文件和配置文件不会被Web访问,该模型使用任意Internet协议(HTTP、FTP等)防止对这些文件的访问。若要防止通过其他方法(例如从内部网络中)对Web服务器计算机本身的访问,请使用Windows的安全功
23、能。在该模型中,用户对本地网络的身份验证凭据也用于访问数据库资源,并且连接字符串中不使用任何显式用户名或密码。,南京理工大学计算机学院,31,南京理工大学计算机学院,32,ADO.NET连接设计工具介绍,7服务器管理器中的设计时连接服务器管理器提供一种创建到数据源的设计时连接的方式。应用程序不直接使用用户以该方式创建的连接。通常,设计时连接提供的信息用于设置添加到应用程序的新连接对象的属性。,南京理工大学计算机学院,32,南京理工大学计算机学院,33,ADO.NET连接设计工具介绍,8Visual Studio中的连接设计工具通常不必在Visual Studio中直接创建和管理连接对象。当使用
24、Data Adapter wizard之类的工具时,这些工具会提示用户输入连接信息(即连接字符串信息),并自动为正在操作的窗体或组件创建连接对象。,南京理工大学计算机学院,33,南京理工大学计算机学院,34,OLE DB连接管理类,1OleDbConnection类的常用属性 OleDbConnection类中定义的常用属性包括:(1)ConnectionString属性 ConneotionString属性用以获取或设置用于打开数据源的字符串。当打开连接时,ConnectionString属性的值为OLE DB提供者连接字符串;而当关闭连接时,ConnectionString属性的值为用户字
25、符串。(2)ConnectionTimeout属性 ConnectionTimeout属性用以获取或设置在终止建立连接并产生异常前的等待时间。ConnctionTimeout属性的值为以秒为单位的整数值,其默认值为15秒。,南京理工大学计算机学院,34,南京理工大学计算机学院,35,OLE DB连接管理类,1OleDbConnection类的常用属性 OleDbConnection类中定义的常用属性包括:(3)Database属性 Database属性用以获取或设置当前数据库名,或连接打开后将使用的数据库名。(4)DataSource属性 DataSource属性用以获取或设置将连接的数据库名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 访问 编程 基础

链接地址:https://www.31ppt.com/p-5359145.html