电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

数据库访问层范文

来源:开心麻花作者:开心麻花2025-09-231

数据库访问层范文(精选7篇)

数据库访问层 第1篇

关键词:对象关系映射,数据访问,元数据,持久层

引言

ORM的全称是Object Relational Mapping, 即对象关系映射。它的实质就是将关系数据 (库) 中的业务数据用对象的形式表示出来, 并通过面向对象 (Object-Oriented) 的方式将这些对象组织起来, 实现系统业务逻辑的过程[1]。在ORM过程中最重要的概念是映射 (Mapping) , 通过这种映射可以使业务对象与数据库分离。从面向对象来说, 数据库不应该和业务逻辑绑定到一起, ORM则起到这样的分离作用, 使数据库层透明, 开发人员真正的面向对象。目前大多数项目或产品都使用关系型数据库实现业务数据的存储, 这样在开发过程中, 常常有一些业务逻辑需要直接用写SQL语句实现, 但这样开发的结果是:遍地布满SQL语句。这些高耦合的SQL语句给系统的改造和升级带来很多无法预计的障碍。为了提高项目的灵活性, 特别是快速开发, ORM是一个不错的选择。举个简单的例子:在使用ORM的系统中, 当数据库模型改变时, 不再需要理会逻辑代码和SQL语句中涉及到该模型的所有改动, 只需要将该模型映射的对象稍作改动, 甚至不做改动就可以满足要求。

1 ORM工具Grove的实现方法

优秀的ORM工具不仅可以帮助我们很好地理解对象及对象的关系, 而且工具本身会帮助我们维护这些关系。Grove ORM Development Toolkit就是基于这个理念设计的基于.NET的ORM工具[3]。Grove在数据持久层的基础上对数据操作的进一步封装, 是对DAAB的进一步的包装, 实现数据操作的面向对象, 同时又有相应的配置工具, 使用更加方便, 因此, 对于快速开发具有很强的实用性。Grove具有以下特点:

1) 由于有Grove ORM Development Toolkit工具, 因此使用方便, 能够自动实现关系表到对象的影射。

2) 支持多种数据库, 以MSSQL、ORACLE为代表。

3) 支持oracle的BloB等数据类型, 能实现不同数据库的类型转换, 具有很强的通用性。

具体实现过程分为以下步骤:

第一, 在ORM实现的前期工作中, 为了实现屏蔽各种数据库之间的操作差异, 我们需要定义数据操作公有接口, 封装基本的数据库Insert, Update, Delete, Query等操作,

第二, 定义一个数据库操作工厂类, 实现各种不同类型数据的适配。

第三, 实现各种数据库的操作类, 以SQLServer为例。

最后, 就是ORM主角——实体 (Entity) 的实现。ORM中实体的定义可以通过实体类自身包含数据模型元数据的方式实现, 也可以通过定义XML的元描述实现。

2 Websharp实现方法

Websharp是sourceforge上的一个新的开源项目, 目标是提供一个.Net环境下的轻量级的应用系统框架, 它包含了三个主要内容:一个O/R Mapping框架, 一个AOP框架, 以及一个Service Locator。WebSharp在数据持久层主要设计思路及涉及的技术:在数据库访问部分, 使用了ADO.Net和工厂模式;在ORM部分, 使用了动态代码生成和即时编译, 以及对DataSet进行了扩展。

2.1 数据实体的表示

WebSharp在数据的表现上, 能够采用两种方式:

1) , 充分利用了.Net Framework类库中DataSet的功能, 设计了一个EntityData类。这个类继承了DataSet, 并增加了一些属性和方法。同数据库的映射关系, 采用XML配置文件的方式。XML配置文件可以通过工具来生成。

2) , 我们可以编写一个User类, 然后, 按照标准的OO的方法来使用这个类。只不过在编写User类的时候, 必须实现Persistence Capable接口, 并且同时可以使用到EntityData类的强大功能。

2.2 事务处理

在很多时候, 在处理对象保存的时候, 需要使用事务处理, 特别是在处理一对多结构对象的时候。在WebSharp中, 可以通过Transaction接口来完成这个功能。

但对于执行多表关联的复杂查询情况, Web Sharp并没有封装简单数据实体的处理, 因为多表关联映射实体类的方法复杂难以控制, Web Sharp舍弃了对这种情况的ORM处理, 但是WebSharp也提供了直接操纵数据库的数据访问接口——DataAccess, 这个接口对ADO.Net进行了一些封装, 可以使程序员更加容易地使用ADO.Net的功能, 并且能够屏蔽不同数据库之间的差别, 能够通过Persistence Manager的New Data Access方法来初始化一个DataAccess对象, 然后调用相应的办法来执行需要的功能。

3 NewMap.ORM

影像中国主要是海量影像的网络发布, 120G的影像数据采用大型关系数据库存储, 而且随着应用的增加, 数据也必然会增加;因此不同类型的数据通用访问成为一个关键问题, 数据库的通用访问层的构建在软件开发过程中也至关重要;由于以上各种ORM的实现都有一定的局限性, 难于满足需求, 因此构建影像中国的通用数据访问层New Map.ORM。

3.1 NewMap的实现

由于在大型软件开发过程中, 主要数据存储采用Oracle数据库, 在ORM实现的前期工作中, 针对Oracle数据库, 定义了数据操作的抽象类, 封装基本的数据库操作。

ORM的简单实现和优化。用户可以根据自己的数据访问要求对数据访问层进行扩展, 比较方便;用户在使用过程中, 只需根据自己的元数据进行扩展数据模型即可。而且每一部分都是独立的, 可扩展的, 能够满足用户的进一步需求。

3.2 NewMap的优化

为了使NewMap.ORM能够快速访问数据, 对NewMap.ORM的性能进行了优化, 使其能够满足系统对海量影像的读取:

1) 传统的访问数据对于访问海量的小对象来说, 每次SQL的编译处理无疑会增加数据库服务器的负担, 因此实际使用中对一些固定的底层影像数据的访问由于其更新不多采用更快速、更安全、更有效的存储过程来实现, 大大加快了数据访问的速度。

2) 由于系统采用C/S结构, 多个客户端同时访问数据库, 必然会出现延迟现象, 通过对NewMap.ORM的优化使其具有更好的效率、更好的健壮性, 在访问数据的过程中表现出色, 当然还有很多值得进一步完善的地方。

4 总结

以上介绍了几种常见的ORM的关键实现, 各有其特点, 但都实现了数据库的基本数据操作, 并有不同程度的面向对象的封装, 用户可根据自己的需要来选择。当然ORM并不是万能的, 有时并不能满足用户多种多样的需求, 这就需要用户根据自己的需要去设计自己的数据库访问层, 也可以在ORM的基础上进行改进。

参考文献

[1]林学鹏.http://www.supesoft.com

[2]李国柱, 吕强, 杨季文.交互式网络数据库应用租字的多线程解决方案[J].计算机工程与科学

[3]刘波, 雷刚跃.基于.NET平台通用数据库组件的设计与实现[J].计算机工程与设计

[4]朱巍峰, 曾联明.Asp.net通用自定义数据库访问类的设计和实现[J], 电脑学习

[5]叶安胜.NET通用数据库访问层封装[J].成都大学学报

[6]饶敏, 赵勇.基于.NET平台可移植的数据访问组件的设计[J].计算机与数字工程

[7]高天仕, 朱美正, 李欣等.通用数据库访问引擎的设计与实现[J].计算机工程用

[8]王军峰, 马玉祥.通用高速数据库访问优化研究[J].现代计算机

数据库访问层 第2篇

三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交换。以微软推荐的分层结构为例,将web应用程序依次划分为数据访问层、业务逻辑层和表示层。

数据访问层负责对数据库的访问,实现对数据表的“查插删改”操作。

业务逻辑层负责业务处理和数据传递,实现业务规则和业务逻辑。

表示层主要负责内容呈现和用户交互。它从业务逻辑层获取数据并显示,同时将和用户交互的相关数据送回业务逻辑层处理。

模型层作为在层与层之间数据传递的载体,包含了与数据库表象对应的实体类。

各层之间的关系为上层调用下层,上层依赖下层,其中模型层是各层间的载体,各层均依赖模型层。

2 ADO.NET数据库访问技术

ADO.NET提供了平台互用性和可伸缩的数据访问,由一系列用于操作数据访问的类组成,通过它可以快速地存取数据,其流程类似生活中的“买苹果“,首先,买家根据卖家信息,和卖家打招呼并告知他购买意愿;其次,告诉卖家要买什么,具体数量等信息;再次,卖家执行买家要求,称好水果;最后,装袋给买家,等待买家进一步处理水果。过程中,WEB应用程序好比“买家”,数据库好比要买的“水果”,ADO.NET核心对象好比“卖家”,WEB应用程序要想实现对数据库的操作,必须通过和“卖家”ADO.NET核心对象,具体流程如下:

1)打招呼:建立并打开连接

2)告知“卖家”要做什么:初始化命令

3)卖家称水果:执行命令

2)告知“卖家”要做什么:初始化命令

4)卖家装袋,待买家下一步处理:保存执行结果待进一步处理

3 三层架构下的ADO.NET数据库访问技术的应用

下面利用三层架构下的ADO.NET数据库访问技术,以新闻发布系统中的用户登录模块的设计为例,介绍其实现方法。根据用户登录逻辑,将整个模块流程设计如图2所示:

3.1 系统基本框架的搭建

搭建思路为:新建模型层新建系统数据访问层新建系统业务逻辑层新建系统表示层添加各层之间的相互依赖。

1)运行Visual Studio2010,新建空白解决方案,将其命名为News Login,

2)新建一个名为NewsModels的类库,添加实体类,将其作为模型层。

3)新建一个名为News DAL的类库,将其作为数据访问层。

4)新建名为News BLL的类库,将其作为业务逻辑层。

5)新建“ASP.NET WEB应用程序”的模板,将其作为表示层,命名为WEB。

6)依次建立表示层对业务逻辑层、业务逻辑层对数据访问层以及这三层对模型层的依赖关系。

3.2 数据库设计

用户表(Users)结构设计为:

Users(Id,UName,UPwd,Real Name,UAddress,Phone,Email)。其中,除Id数据类型为int,是用户表(Users)主键,其余字段数据类型为nvchar(50)。

3.3 用户登录模块实体类的实现

实体类通常是根据数据库表的设计编写成员变量和相应的变量读写属性,再加一个构造函数即可。如用户实体User类可以在类文件user.cs中编写实现。

3.4 用户登录模块数据访问层的实现

根据用户输入的用户名和密码提交数据库进行查询,如果查询的用户记录存在,则返回一个用户对象,不存在则返回null。

在NewDAL数据访问层中新建类文件User Service.cs。将数据访问层中的有关用户对象的操作都写在这个类里,在其中定义一个根据登录名查询用户的方法public static User Get User By UName(sting UName).

3.5 用户登录模块业务逻辑层的实现

当用户登录系统时,首先要判断输入的登录信息是否有效。可以在业务逻辑层创建一个对应的用户登录方法,接收表示层提交过来的用户名和密码,判断是否为合法用户。如果是合法用户,则返回true,否则返回false。

在NewsBLL业务逻辑层中新建类文件User Manager.cs,在其中定义验证用户登录信息是否有效的方法public static bool User Login(sting UName,string UPwd,out User valid User)。

3.6 用户登录模块表示层的实现

表示层用于显示数据和接收用户输入的数据,为用户提供一种交互式操作。在用户单击“登录”按钮的单击事件中,首先进行用户输入内容的合法性验证(用.net验证控件实现即可),然后通过调用业务逻辑层的相关方法判断用户名和密码是否匹配,如果匹配,则登录系统主页,否则提示登录失败。在News Login项目中新建一个Admin文件夹,在该文件夹下创建页面文件admin Login.aspx。

4 总结

为了体现”高内聚,低耦合”的软件设计思想,在基于ado.net的数据库访问技术中,三层架构思想应用越来越广泛,它以分层思想把WEB应用程序划分成不同的层次加以实现,从而实现了对人员的合理分工,提高了开发效率,也使得.net web应用程序的可扩展性和健壮性得到很大的提升,在实际使用过程中,ASP.NET三层结构各司其职,互不干涉,在WEB应用程序开发和后期维护中极为便捷,值得我们一探究竟。

参考文献

[1][2013-2-18].http://www.w3school.com.cn/aspnet.

[2]黄忠成.深入剖析ASP.NET组件设计[M].北京.电子工业出版社,2004.5.

[3]翁建红.ASP.NET程序设计案例教程[M].北京中国铁道出版社,2010.11.

[4]周金桥.ASP.NET夜话[M].北京:机械工业出版社,2009.8.

数据库访问层 第3篇

以生产管理系统实际问题为背景,针对传统的访问数据库的方式提出了通用数据类的概念。在软件的分层体系结构中,通用数据类是与数据库打交道的逻辑层。在数据库中对数据的增加、删除、查找和修改操作由通用数据类来处理。采用通用数据类,使程序员在一定程度上摆脱了繁重的SQL,而且通过数据类也实现了自动拼写相应的SQL语句。这个项目主要就是利用ADO.NET和XML技术实现了数据访问层的思想,并实现了事务处理。

2 传统的Web应用程序访问数据库方式

目前传统的Web应用程序访问数据库(均指关系数据库)的结构如图1所示。

图1中所采用的方法是SQL代码是嵌入在domain/business类中,这种策略是针对小型系统能快速开发,一旦系统出现改动,就要修改源代码,程序员的工作量很大。

目前比较通用的方法如图2所示。

图2中所采用的方法是business类的SQL代码写在独立的一个或多个数据类中或在存储过程中。这种方法相对于把SQL代码嵌入在domain/business类中有了很大的进步,但是这种方法同样也只适用于business类小于40至50个左右的小型系统。这种方法只是做到了压缩了源代码,而把处理SQL放置在了数据类中或者在数据库的存储过程中。

3 采用通用数据类来实现数据访问层

传统的Web应用程序访问数据库所采用的方法中SQL代码是写在源代码中,这就意味着任何一个简单的改变,例如改变数据库中表的一个列名,则必须修改源代码。这种修改对于大中型系统,缺陷是极为严重的。通用的方法是SQL代码写在独立的一个或多个数据类中或在存储过程中,这种方法做到了压缩了源代码,而把处理SQL放置在了数据类。

针对上述的情况,提出了通用数据类的概念。在软件的分层体系结构中,通用数据类是与数据库打交道的逻辑层。在数据库中对数据的增加、删除、查找和修改操作由通用数据类来处理。结构如图3所示。

采用通用数据类,使程序开发人员摆脱开SQL和事务,达到了快速开发的目的。采用通用数据类有以下几个优点:

(1)摆脱了繁重的SQL。

(2)实现了SQL语句的自动拼写,大大提高了工作效率。

(3)事务集中处理。

业务调用数据访问层的流程如下:流程开始,进入业务逻辑层,根据业务的需求提供表名,调用方法来解析XML,该XML描述了整个数据库表的字段,把解析后所需表的列名用数组保存,之后调用相应的函数,装载相应表的列值,也用数组保存,一般来说这一步是把表示层的Datagrid的数据读出来(如进行插入或修改操作时),接下来就进入了数据访问层,传表名、两个数组,一个数组是列名,另一个数组是列值,数据访问层的通用数据表拼接SQL语句,并且把它实例化,执行SQL语句,进行事务处理,至此,流程完成。

4 关键技术

4.1 实现将列名与列值用数组保存

(1)用XML来描述整个数据库的表,例如产品信息表用XML如下描述:

利用XML,只是简单地将构成表的列进行描述,并没有描述表与表之间的关系以及主外键。

(2)通过程序解析XML将表的列名用数组保存,首先解析数据源.xml中的一个

标签,返回一个Data Source类型的对象,该对象表示数据库所有表。

以下是实现的伪码:

1)功能描述:从数据源中得到数据表的列的名字。

2)参数描述:table Name是数据源中表的名字。

3)返回参数:数据源中表的列的名字。

4.2 自动拼写SQL语句

当业务层传入数据访问层的参数为表名,列名与列值,其中列名与列值用数组表示,这种参数也为实现自动拼写SQL语句创造了条件。

实现自动拼写SQL语句在实际上就是连接字符串,从技术角度上并不是什么创新,但从程序员编码的角度来看,却是一个很大的进步。Web应用程序有相当一部分的SQL代码,如果程序员不必关心底层的结构,只需把参数填入,这对程序员来说是一个提高效率的好方法。

以插入数据为例来说明如何实现相应的SQL语句:

功能描述:插入数据库的SQL语句拼写及执行。

输入参数:数据库表;列名数组;列值数组;连接参数。

返回参数:插入该数据库表的SQL语句。

5 事务处理

事务都具有ACID的性质。工厂模式专门负责将大量具有共同接口的类实例化。工厂模式可以动态的决定将哪一个类实例化而不必事先知道要实例化的类。在这个项目中,采用的是工厂模式。利用工厂模式实现事务处理,如图4所示。

Dobusiness()方法的流程图如图5所示。

当业务调用Dobusiness()方法时,基于工厂模式,调用Try{Action()}函数,来判断是否有异常出现,如无异常,则进入Commit()语句执行提交;如有异常抛出,则进入RollBack()语句,进行回滚,提交或者回滚这两种情况只做其中一种处理,然后事务处理结束。

6 结语

采用通用数据类来实现数据访问层,使程序员在一定程度上摆脱了繁重的SQL,而且通用数据类也实现了自动拼写相应的SQL语句。该通用数据类应用于生产管理系统,并取得了良好的效果。由此,基于.NET平台下用ADO.NET来实现数据访问层具有一定的实际应用价值。

摘要:目前传统的Web应用程序访问数据库的方法是SQL代码嵌入在domain/business类中,一旦系统出现改动,就要修改源代码。目前比较通用的方法是SQL代码写在独立的一个或多个数据类中或在存储过程中,这种方法能压缩源代码。提出了通用数据类的概念。采用通用数据类,使程序开发人员摆脱开SQL和事务,达到了快速开发的目的。利用ADO.NET和XML技术实现了数据访问层的思想,并实现了事务集中处理。

关键词:ADO.NET,XML,数据访问层,事务处理

参考文献

[1]陈英学.Microsoft ASP.NET深入编程.北京希望电子出版社,2001.

[2]Grant Palmer.C#程序员参考手册.康博,译.清华大学出版社,2002.

[3]Terrence J.Joubert,Ryan N.Payet,ADO.NET Program-ming.Wordware出版,2003.

[4]Charles Petzold.C#程序设计.杨涛,王建桥,杨晓云,高文雅,译.机械工业出版社,2004.

[5](意)Dino Esposito.精通ASP.NET程序设计.罗兵,顾雁宏,詹文军,译.Programming Microsoft ASP.NET.清华大学出版社,2006.

数据库访问层 第4篇

在ASP.NET 2.0中,开发者使用SqlDataSource数据源控件和GridView数据编辑、显示控件,利用Visual Stuido 2005的集成开发环境,通过简单拖放控件就可以实现基于SQL Server的Web应用。在这种简单的Web应用中,访问数据库的SQL语句与数据显示控件的代码位于同一个HTML显示页面中,一般将这种数据库的Web应用称为二层架构的Web应用。

在ASP.NET 2.0中,开发者可以使用新的ObjectDataSource数据源控件,将TypeName设置为一个中间的数据访问层,通过ObjectDataSource中的相关方法,与该数据访问层中的有关方法相关联。由于在用户显示界面的HTML页面中,没有直接包含有关数据库操作的SQL语句,从而将数据访问的业务逻辑与数据显示界面实现了分离,有利于开发人员与界面设计人员之间的分工,更重要的是提高了系统的可扩展性,便于开发者开发较为复杂的Web应用程序。通过ObjectDataSource实现这种数据库的Web应用,可以称之为三层架构的Web应用。

在实现上述三层架构的Web应用中,开发者需要构建一个中间的数据访问层,该数据访问类主要实现与数据库的连接,将相关数据表的映射类实例化,实现对数据表的查询、更新、插入和删除操作,因此实现这个数据访问层需要不少的代码量。对于数据库SQL Server 2005来说,通过SQL Server 2005的系统信息架构视图,可以构建相关数据表实体的映射类;通过ADO.NET技术实现数据访问层;然后利用ASP.NET 2.0的BuildProvider类,自动化编译数据表实体的映射类和数据访问层到程序集中,从而实现零编码的数据访问层,使得开发者可以简单、快速地实现三层架构的Web应用。

1 构建数据表实体映射类

在SQL Server 2005的系统视图中,通过INFORMATION_SCHEMA.TABLES信息架构视图,可以获得连接数据库中的数据表名称;通过信息架构视图INFORMATION_SCHEMA.COLUMNS,可以获得指定数据表中的字段名称和字段类型等信息。有了数据库的这些基本信息之后,就可以将数据库中的每一个表映射为一个类,将该数据表中的每一个字段映射为该类中的相关属性,因此每一个类的实例就映射为数据表中的一行数据。

在SQL Server 2005中,对于示例数据库NorthWind中的Shippers表来说,Shippers表实体与类Shippers之间的映射关系如图1所示。

在图1中,Shippers数据表中定义了3个字段,它们分别是ShipperID、CompanyName和Phone,其字段类型分别为int和nvarchar;Shippers数据表对应的映射类Shippers的属性分别为ShipperID、CompanyName和Phone,这些属性的变量类型分别为Int32和string,并定义了映射类Shippers的构造函数和所有属性的读写器。

需要说明的是,上述数据表实体到类的映射是十分简单的,没有考虑各个数据表之间复杂的关联,而对于复杂的数据表结构,可以采用相关的开源软件工具来实现。

2 构建数据访问层

在建立了每一个数据表的映射类之后,还需要建立一个专门的数据访问层,也就是一个专门的访问类,利用ADO.NET技术,通过连接指定的数据库,实现对数据表的查询、更新、插入和删除等业务逻辑。

在SQL Server 2005中,对于示例数据库NorthWind中的Shippers表来说,需要构建的数据访问层就是ShippersManager类,ShippersManager类的UML类图如图2所示。

在图2中,ShippersManager数据访问层这个类中定义了4个方法:GetShippers()、UpdateShippers()、InsertShippers()和DeleteShippers()方法,它们分别实现了对数据表Shippers的查询、更新、插入和删除操作。

3 自动化构建数据访问层

自动化构建数据访问层包括二个步骤,首先需要自动化生成数据访问层的源代码,然后将该数据访问层源代码自动编译到程序集中。

通过前面所述的构建数据表实体的映射类和数据访问层方法,可以获得映射类和数据访问层的代码模板;通过SQL Server 2005系统视图中的信息架构视图信息,可以自动化生成数据访问层的源代码。

利用ASP.NET 2.0中一个新的BuildProvider类, Web应用程序可以自动将数据访问层的源代码编译到程序集中,从而实现自动化构建数据访问层。

System.Web.Compilation.BuildProvider类是一个抽象类,通常需要具体实现该抽象类的一个子类,来实现专门的生成业务逻辑,也就是说,需要具体实现BuildProvider抽象类中的GenerateCode()方法即可。

在上述代码中,指定一个输入流inFile,其中被读取的文件放置在App_code目录中,读取的文件类型在配置文件web.config中设置。

通过读取App_code中指定文件的内容,可以获得一个数据表名称(如Shippers数据表),然后调用BuildCode()方法,生成一个与数据表名称对应的数据表的映射类(如Shippers类)和数据访问层(如ShippersManager类)的源代码,code变量就表示该源代码;源代码code赋值给源代码块对象unit的属性Value,然后调用assemblyBuilder中的AddCodeCompileUnit()方法,将自动化生成数据表的映射类和数据访问层自动编译到程序集中,以便开发者随时调用。

自动化构建数据访问层主要由三个类来实现,它们的UML类图如图3所示。

在图3中,TableColums类用于表示指定数据表中的各个字段,其中定义了二个属性,它们分别是字段的名称ColunmName、字段的类型ColunmType。

CodeGeneration 类对指定的数据表产生对应的映射类和数据访问层的源代码,其中定义了二个重载的GetCode()方法,分别得到指定数据表名称的数据访问层源代码以及所连接的数据库中所有数据表对应的数据访问层源代码。

SpencerBuildProvider 类则是BuildProvider抽象类的一个具体实现,以便自动化编译数据访问层源代码,在BuildCode()方法中调用了CodeGeneration类中的GetCode()方法。

4 程序运行

在测试用网站中,SpencerBuildProvider类放置在App_code目录中,被读取的文件名为test.abp,该文件中输入了Shippers,表示需要自动生成关于该数据表的数据访问层。

在Visual Studio 2005的解决方案资源管理器窗口中双击Default.aspx.cs文件,此时在输入代码处键入代码“Ship”,在出现的代码智能感知下拉框中将会出现“ShippersManager”的类名称,ShippersManager类就是一个关于数据表Shippers的数据访问层,该数据访问层不再需要开发者手工编码实现,通过SpencerBuildProvider类,就可以为开发者自动化生成有关数据表的数据访问层的源代码,并将该数据访问层源代码自动编译到程序集中,从而实现零编码的数据访问层。如果在test.abp文件中输入*,SpencerBuildProvider类将会针对指定的数据库NorthWind自动化生成所有数据表相关的数据访问层源代码,代码量超过1000行,并将这些数据访问类自动编译到程序集中,供开发者随时调用。

这样,当开发者利用ObjectDataSource控件,开发三层架构的Web应用时,不再需要开发数据访问层,只需要简单设置ObjectDataSource中的相关方法SelectMethod、UpdateMethod、InsertMethod和DeleteMethod,与零编码的数据访问层中的有关方法相关联,就可以实现简单、快速地开发较为复杂的、基于三层架构的Web应用。

5 结 论

本文通过SQL Server 2005所提供的系统视图中的信息架构视图信息,自动化构建了数据表的映射类和数据访问层的源代码,然后通过ASP.NET 2.0所提供的BuildProvider类,将数据访问层的源代码自动编译到程序集中,供开发者随时调用,从而实现了零编码的数据访问层,使得开发者利用ObjectDataSource控件,可以简单、快速地开发较为复杂的、基于三层架构的Web应用。

摘要:使用ASP.NET2.0所提供的BuildProvider类,将自动化构建的数据访问层源代码编译到程序集中,使得开发者利用Ob-jectDataSource控件,可以简单、快速地实现三层架构的Web应用。

关键词:数据访问层,BuildProvider,ASP.NET 2.0,ObjectDataSource控件

参考文献

[1] Patrick A Lorenz.ASP.NET 2.0 Revealed[M]. New York:Apress,2004.

[2]Alex Homer,et al.A First Look at ASP.NETv.2.0[M].Boston:Ad-dison Wesley,2003.

[3] Stefan Schackow.Professional ASP.NET 2.0 Security,Membership,and Role Management[M].Indiana:Wiley publishing,2006.

[4]Dino Esposito.Programming Microsoft ASP.NET2.0 Applications:Ad-vanced Topics[M].Boston:Microsoft Press,2006.

数据库访问层 第5篇

LTE (Long Term Evolution) 项目是3G的演进, 是3G与4G技术之间的一个过渡, 是3.9G的全球标准, 它改进并增强了3G的空中接口技术。在LTE协议栈层次结构中, MAC (Media Access Control) 层是LTE系统的主要组成部分之一。在M A C层中随机访问过程直接影响到系统的性能, 本文在仔细研究随机访问过程的基础上设计并实现了该模块的功能, 并且在系统设计上提出了增强性能的解决方案。

1 LTE MAC层随机访问研究

随机访问过程

当UE没有被分配上行无线资源但有数据要传输时候或者上行方向时间失同步时候进入随机访问过程。随机访问过程是FDD和TDD均有的过程, 与小区的大小无关。如下的五个事件要执行随机访问过程:

1) 来自LTE_RRC_IDLE的最初访问;

2) 无线连接失败之后的初始访问;

3) 需要随机访问的切换;

4) 在RRC_CONNECTED期间, DL数据到达, 并需要随机访问;

5) 在RRC_CONNECTED期间, UL数据到达, 并需要随机访问。

随机访问过程分成基于竞争的和基于非竞争的, 基于竞争的应用于上述五种事件, 基于非竞争的应用于切换和下行数据到达情况。

基于竞争随机访问:

(1) :上行随机访问前导。包括6-bit, 其中5-bit是随机选择的ID, 另1-bit是其他信息:请求资源控制块的大小或者CQI等。

(2) :下行随机访问相应。包括校时信息、初始R L授权信息和临时C-RNTI。

(3) :Msg3。就初始访问来说包括48-bit唯一UE标识和RRC建立连接的请求信息, 使用HARQ。

(4) :竞争解决。包括UE标识和传输H A R Q返回信息。

基于非竞争随机访问:

前导配置信息。eNB给UE分配的非竞争随机访问前导, 6-bit。

(1) 和 (2) 与基于竞争的随机访问过程大体相同。

初始随机访问过程:

(1) 初始随机访问事件触发进入随机访问过程, 因为初始随机访问是基于竞争的访问, 所以U E端选择前导码、选择R A C H信道发送前导码, 打开定时器, 随机访问状态由ra_idle变成ra_preamble_snd;

(2) 若定时器超时则随机选择指定范围的延迟时间重新选择前导码并发送, 重置定时器, 随机访问状态由ra_preamble_snd变成ra_preamble_resnd;

(3) 若接收线程接收到随机访问响应并且通过RA_RNTI判断出是自己信息之后, 通知发送线程随机访问状态由ra_preamble_snd或者ra_preamble_resnd变成ra_rar_rcv.接收线程同时解码此随机访问响应;

(4) 由于初始随机访问是基于竞争的所以解码后会通知发送线程将准备好的Msg3发送, 打开定时器, 随机访问状态由ra_rar_rcv变成cnt_ra_msg3_snd;

(5) 若定时器超时或者HARQ模块提出重传信号则将Msg3信息重新发送, 重置定时器, 随机访问状态由cnt_ra_msg3_snd变成cnt_ra_msg3_resnd;

(6) 若接收线程接收到竞争解决信息并且通过TEMP_C_RNTI判断出是自己信息之后, 通知发送线程随机访问状态由cnt_ra_msg3_snd或者cnt_ra_msg3_resnd变成cnt_ra_resolut_rcv, 接受线程同时解码此竞争解决信息;

(7) 若从竞争解决信息中找到自己48-bit唯一UE标识, 随机访问状态由cnt_ra_resolut_rcv变成ra_success.若找到的UE标识不是自己的, 随机访问状态由cnt_ra_resolut_rcv变成ra_fail.

(8) 若随机访问状态是ra_fail则延迟指定的一段时间后重新进行前导码的选择过程回到步骤 (1) ;

(9) 若随机访问状态是ra_success则通知上层随机访问过程成功, 并将TEMP_C_RNTI赋值给C_RNTI.

2 仿真平台搭建和提高性能设计方案

2.1 仿真平台搭建

(1) 采用socket通信方式来模拟物理层通信。考虑到U D P模式是不可靠传输, 可以很好的模拟实际通信中信道条件不好的情况, 所以socket采用U D P模式。

(2) Transport Channel和Logic Channel的设计:参考“生产者消费者算法”, 利用windows系统提供的信号量和互斥量机制将传输信道和逻辑信道设计成类似于消息队列的访问方式。可以实现socket线程和MAC层收发线程的访问同步。

2.2 提高性能设计方案:

(1) MAC层与上下层间采用零拷贝技术, 即MAC层与上下层协议都处在同一个地址空间, 因此数据传输可以利用传地址方式, 从而减少了数据复制次数, 一定程度上提高了软件执行效率。

(2) 采用了内存池技术, 通过对申请空间小而申请频繁的对象进行有效管理, 减少内存碎片的产生, 合理分配管理用户内存, 从而减少系统中出现有效空间足够, 而无法分配大块连续内存的情况。

(3) 采用了线程池技术, 当系统中有大量线程时, 采用此技术可以有效减少线程创建和销毁的时间。

3 功能测试

上面图1是随机访问状态机中的初始访问实例, 共有四个线程:用于模拟物理层发送的线程Sock_Phy_Send, 用于模拟物理层接收的线程Sock_Phy_Recv, 用于Mac层发送的线程Mac_Send, 用于Mac层接收的Mac_Recv.具体流程如下:

(1) Mac_Send获得选取的前导码;

(2) Mac_Send将前导码封装成传输信道统一的结构单元并将它插入RACH信道;

(3) Sock_Phy_Send从RACH取出单元;

(4) Sock_Phy_Send将之发送到eNB;

(5) Sock_Phy_Recv收到eNB的信息;

(6) Sock_Phy_Recv从内存池获得内存块来存储收到的信息;

(7) Sock_Phy_Recv将此信息插入到DL_SCH中;

(8) Mac_Recv从DL_SCH中取得信息并解码

(9) Mac_Recv将状态改变信息通知Mac_Send;

(10) Mac_Send从CCCH中获得将要建立RRC连接的请求信息;

(1 1) Mac_Send获得48-bit的UEID;

(12) Mac_Send将这些信息封装成传输信道统一的结构单元并将它插入UL_SCH;

(13) Sock_Phy_Send从UL_SCH取得单元;

(1 4) Sock_Phy_Send将之发送到eNB;

(15) Sock_Phy_Recv收到eNB的信息;

(1 6) Sock_Phy_Recv从内存池获得内存块来存储收到的信息;

(17) Sock_Phy_Recv将此信息插入到DL_SCH中;

(1 8) Mac_Recv从DL_SCH中取得信息并解码;

(19) Mac_Recv将状态改变信息通知Mac_Send;

(2 0) Mac_Send通知上层初始随机访问成功或者失败, 要是失败则会推迟规定时间后重新进行随机访问。

4 总结与展望

文章对LTE协议栈MAC层随机访问过程进行深入分析, 在此基础上设计了MAC层的整体架构并实现了初始接入的随机访问过程, 重点研究的是基于竞争模式下的随机访问过程。该随机访问过程在仿真平台上得到了验证。有限自动状态机具有全面性和简单性特点, 便于在多线程环境下实现。随机接入过程的实现对RRC层和物理层功能的实现具有重大意义。

参考文献

[1]胡宏林, 徐锦.3GPP LTE无线链路关键技术.北京:电子工业出版社.2008:207-221

[2]张克平.LTE-B3G/4G移动通信系统无线技术.北京:电子工业出版社.2008

[3]屈延文.软件行为学.北京:电子工业出版社.2004

[4]屈延文.信息化的科学梦.电子工业出版社.2006

[5]严蔚敏, 吴伟民.数据结构 (C语言版)

[6]冯晓芳.我国电话用户突破九亿

数据库访问层 第6篇

关键词:ORACLE数据库,军卫一号,HIS,并发访问,访问冲突

0 前言

作为全球知名的关系型数据库产品, ORACLE数据库以其出色的数据库管理能力、超强的稳定性、良好的并发控制机制而闻名。ORACLE数据库系统本身是一个多用户并发处理系统, 任何一个时间节点内都可能有许多用户同时访问和操作同一个数据库对象。因此, 并发访问控制是数据库最核心的管理机制之一, 也是在数据库运行过程中容易出现错误和故障的地方。本文对ORACLE数据库并发访问控制机制展开探讨, 并就实际工作中容易产生的并发性错误提出相应的解决方法。

1 闩锁和锁定机制

ORACLE数据库通过闩锁 (latch) 和锁定 (lock) 两种机制来解决并发性访问问题[1]。闩锁是一个低级别、轻量级的锁, 获得和释放的速度很快, 以类似信号灯的方式实现。锁定可能持续的时间很长, 通过使用队列, 按照先进先出的方式实现。可以认为闩锁用于微观领域, 而锁定用于宏观领域。

1.1 闩锁

ORACLE数据库使用闩锁来管理内存、数据块的分配和释放。当某个用户进程 (假定为A) 要对一个数据块 (block) 进行写操作时, 将先获得该数据块的闩锁, 在其写操作完成之前, 该闩锁将被此用户进程独占, 此时如果有其他进程 (假定为B) 试图对此数据块进行写操作, 会因无法获得闩锁而被迫进入等待状态, 当A进程结束操作时将释放闩锁, B进程可以获得闩锁开始对数据块进行读写操作。闩锁不仅用于数据块读写管理, ORACLE中任何涉及到内存地址的读写操作都要通过获得闩锁来实现串行化, 一次只能有一个服务器进程在读或写内存地址[2]。闩锁分两种类型:愿意等待 (Willing-To-Wait) 和不等待 (No-Wait) 。大部分闩锁属于第一种类型。当进程无法获得闩锁时, 会绕着CPU旋转一段时间 (以μs来计算) 并再次尝试获得闩锁, 当反复旋转CPU并尝试获取闩锁的次数超过某个上限 (该上限由隐藏参数控制) 时, 该进程才会释放CPU并进入睡眠状态, 同时产生一个对应的等待事件并记录在视图V$session_wait里。No-Wait型闩锁较少见。当进程请求此类闩锁时, 若请求失败, 进程将不会旋转CPU而直接转向另一个闩锁的申请。

1.2 锁定

锁定用来控制多用户对数据库表的相同数据的并发访问。锁定分TX锁 (TX锁) 和表级锁 (TM锁) 。当用户进程找到被更新数据块的相应数据行时, 在其头部设置一个行级锁, 并在头部记录当前事务所使用的ITL槽的槽号。其他用户进程如果要更新此数据行的数据, 将发现该条记录已经被添加了行级锁而进入等待状态, 直到前面的进程完成更新操作并释放TX锁为止。由此可见, TX锁是一种排他锁 (X锁) , 即一旦用户对某个资源添加了X锁, 则其他用户都不能对该资源添加任何类型的锁, 直到该用户释放了资源上的X锁为止。用户对表数据进行更新时, 不仅会在数据行的头部记录行级锁, 而且还会在表的级别上添加一个TM锁。TM锁共5种模式[3]: (1) 行级排他锁 (RX锁) :DML操作会自动在被更新的表上添加RX锁。该模式允许其他事务通过DML语句修改相同表里的其他数据行, 但不允许其他事务对相同的表添加X锁; (2) 行级共享锁 (RS锁) :通过selectfrom

for update语句可以添加RS锁, 该锁不允许其他事务对相同的表添加X锁, 但允许其他事务通过DML语句锁定相同表里的其他数据行; (3) 共享锁 (S锁) :通过lock table

in share mode命令添加该S锁。该锁不允许任何用户更新表, 但允许其他用户对表添加RS锁; (4) X锁:通过lock table

in exclusive mode命令添加该X锁, 该锁不能对表进行任何的DML和DDL操作, 只能对该表进行查询; (5) 共享行级排他锁 (SRX锁) :通过lock table

in share row exclusive mode命令添加SRX锁, 该锁不能对相同的表进行DML操作, 也不能添加共享锁。

2 锁定的相关视图

ORACLE数据库借助以下几个数据字典来管理锁定问题[4]:

(1) V$transaction:该视图记录当前每个活动事务的信息。其中比较重要的字段包括XIDUSN (当前事务使用的回滚段的编号) 、XIDSLOT (事务在回滚段头部的事务表中对应的记录编号) 、XIDSQN (序列号) 。

(2) V$lock:该视图记录了当前对话已经获得的锁定以及正在请求的锁定信息。其中比较重要的字段包括SID (session的ID号) 、TYPE (锁定的类型和级别) 、REQUEST (正在请求的锁定模式) 、BLOCK (是否阻止了其他用户获得锁定) 。

(3) V$locked_object:该视图记录当前已经被锁定的对象信息, 其中比较重要的字段包括XIDUSN (当前事务使用的回滚段的编号) 、XIDSLOT (事务在回滚段头部的事务表中对应的记录编号) 、XIDSQN (序列号) 、OBJECT_ID (当前被锁定对象的ID) , LOCKED_MODE (锁定模式的数字编码) ) 。

(4) V$session:记录当前session的相关信息。其中比较重要的字段包括SID (session编号) 、SERIAL# (序列号) , SID和SERIAL#共同标识一个session。

3 并发访问冲突的现象、原因、检测和解决方法

3.1 并发访问冲突的现象

笔者所在的单位是一所部队医院, 运行的是“军卫一号”医院信息系统, 该系统以ORACLE为数据库管理系统 (目前版本是10g) , 开发环境是Power Builder9.0, 并发用户数在400台左右。在长期的数据库维护管理工作中, 笔者经常遇到并发访问冲突的问题。表现为:某一台或几台机的用户在进行程序操作特别是进行数据保存时死机 (鼠标呈沙漏状) , 此时系统不会有任何错误提示, 若用户强行结束任务后重新进行上述操作仍然失败, 最极端的情况是所有写某个数据表的用户都会死机。

3.2 原因

造成上述访问冲突的原因一般有以下两种[5]:

(1) 应用程序中的BUG。Power Builder经常通过数据窗口技术 (datawindow) 来实现对数据的读写。当数据窗口完成一次数据更新后, 要通过resetupdate () 函数来进行数据窗口更新状态的复位。否则数据窗口在进行多次数据读写操作后很容易出现更新数据但不提交的现象 (即对某数据表UPDATE后没有COMMIT) , 当其他用户或程序也对该表的相同行数据进行写操作时, 就会把用户锁定。

(2) 客户端的电脑故障。当客户端对数据表进行读写操作时, 如果此时客户端电脑发生故障, 如WINDOWS系统死机等, 此时该用户的COMMIT动作没有完成。其他用户如果也在访问该表的相同数据行, 则很容易产生锁定。

3.3 检测和解决方法

笔者通过一个具体的例子来阐述并发访问冲突的解决方法。假设A用户在SQL_PLUS中执行语句:update dept_dict set dept_name=’aaa’where dept_code=’1001’;然后B用户执行语句:update dept_dict set dept_name=’bbb’where dept_code=’1001’, 此时B用户的SQL语句运行将出现死机。当执行select*from v$locked_object语句, 查出当前被锁住会话的session_ID是9和11。再执行语句select sid、type、ID1、ID2、lmode、request、block from v$lock where sid in (9, 11) , 查询结果, 见表1。

从表1可知, A用户的SQL语句 (即SID=9的会话) 已经在DEPT_DICT表中添加了TX锁和TM锁, 当B用户执行自己的SQL语句 (即SID=11的会话) 时也往该表的同一条记录添加TX锁和TM锁。TM锁添加成功, 添加TX锁时由于该行记录已被A用户的会话锁住且尚未释放, 所以添加失败, 因此第4行记录的Lmode字段值为0, 表示TX锁未添加成功, 同时第1行记录的Block字段值为1, 表示sid=9的会话的TX锁阻止了其他用户获得此锁。查明是由于sid=9的会话阻塞了sid=11的会话获得锁定后, 我们就可以进行解锁操作了。通常的解锁操作有两种:一种是将前面会话的SQL操作正常提交, 即运行COMMIT语句, 当A用户的SQL操作完成后自动会将TX锁和TX排他锁释放, B用户即可获得该条记录的TX锁并完成自己的SQL操作。第二种方法是将前面会话删掉, 此方法用于前面会话已经无法正常提交的情况。以本例而言, 可执行语句:select sid, serail#from v$session where sid=9, 查出sid=9的会话serial#=189;然后运行语句:alter system kill session (9, 189) , 将A用户的会话强行删除, 该会话自动释放TX锁和TM锁, 这样B用户即可获取相应锁并完成自己的SQL操作。

4 结束语

综上所述, ORACLE数据库主要是通过闩锁和锁定机制来实现对数据库并发访问的控制, 前者基于内存和数据块层面, 属微观范畴;后者基于数据表和记录, 属宏观领域。同时ORACLE提供了若干数据字典和视图, 方便数据库管理员 (DBA) 实时了解数据库当前的用户连接和锁定状况, 共同为ORACLE用户提供强大的并发控制机制和高效的并发管理能力。

参考文献

[1]余钢, 朱莉, 张云睿.ORACLE DML封锁等待原因分析和应用中的处理方法[J].电脑知识与技术, 2005, (10) :42-43.

[2]萨师煊, 王珊.数据库系统概论[M].3版.北京:高等教育出版社, 2000.

[3]沈金发, 郑甫京, 王令赤, 等.ORACLE关系数据库系统[M].北京:清华大学出版社, 1992.

[4]韩思捷.ORACLE数据库技术实用详解[M].北京:电子工业出版社, 2008.

[5]滕永昌.ORACLE9I数据库管理员使用大全[M].北京:清华大学出版社, 2004.

[6]周芃, 顾凤军, 周昕.ORACLE闪回技术的使用与分析[J].中国医疗设备, 2009, 24 (2) :51-53.

VB数据库的访问技术 第7篇

Visual Basic专业版是一种广泛使用的数据库编程语言, 提供了对数据库应用的强大支持。VB访问数据库的方法大致有三类:使用数据绑定控件, 使用数据库存取对象变量 (Data Access Object Variable) , 直接调用ODBC 2.0 API接口函数。

一、VB的数据库结构

VB数据库的核心结构是MicroSoft Jet数据库引擎, JET引擎的作用是支持多种ISAM (Indexed Sequential Access Method, 即索引顺序存取方法) 数据驱动程序。VB环境下Access是缺省的数据格式, 对于其他的关系型数据库如FoxPro、Dbase (或Xbase) 、Paradox、Btrieve等, VB的专业版可兼容其驱动程序, 这就使得VB能支持这些数据库格式。由上可见, Ms JET引擎实质上提供了:一个符合ANSI标准的语法分析器;为查询结果集的使用而提供的内存管理功能;同所支持的数据库的外部接口;为应用代码提供的内部接口。

二、VB访问数据库的原则和方法

1. VB访问数据库的原则

(1) 代码的重用和运行的效率

VB程序设计中, 应尽可能减少代码的重复编写, 提高运行效率。例如:通过使用ODBC数据源连接数据库的方法, 可在变换多种数据库类型的情况下, 而不用频繁修改代码。用VBSQL通过DB-Library就做不到。而ODBC接口并不是VB访问数据库运行效率最高的方法。同样, 同是使用ODBC接口的ADO的效率要高于RDO。

(2) 实现的简便性, 易维护性

如果一种方法实现起来很复杂, 工程的开发必然造成人力物力的浪费, 同时这样设计出来的应用程序只会支持起来更复杂或维护时更困难。例如:本地需要访问ISAM或Jet类型数据源, 那么就使用DAO/Jet, 而没有必要使用通过ODBC的方法。RDC实现起来要较RDO更容易。

(3) 安全原则

这一条应根据环境和条件决定。例如局域网的网络安全性要好于广域网, 因而可直接利用数据控件DC, 这样实现起来方便快捷, 而广域网需要大量的错误捕获, 如用RDC就不如用RDO易控制错误。

2. 数据访问接口功能及含义

ADC (Advanced Data Connector) :高级数据连接器, 提供绑定ADO数据源到窗体的数据绑定控件上。ADC主要是一种直接访问或者通过ADO访问远程OLE DB对象的一种技术, 它也支持主要应用在微软IE浏览器上的数据绑定控件。它是特地为Web上的浏览器为基础的应用程序而设计的。

ADO (Active Data Objects) :Active数据对象, ADO实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式, 通过ODBC的方法同数据库接口。可以使用任何一种ODBC数据源, 即不止适合于SQL Server、Oracle、Access等数据库应用程序, 也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术, 因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。

DAO (Data Access Objects) :数据访问对象, 是一种面向对象的界面接口。通过DAO/Jet功能可以访问ISAM数据库, 使用DAO/ODBC Direct功能可以实现远程RDO功能。使用DAO的程序编码非常简单, DAO提供丰富的游标 (Cursor) 类型的结果集和非游标 (Cursor-Less) 类型的结果集, 同DDL (数据描述语言) 的功能很类似。DAO模型是设计关系数据库系统结构的对象类的集合。它们提供了完成管理这样一个系统所的全部操作的属性和方法, 包括创建数据库, 定义表、字段和索引, 建立表间的关系, 定位和查询数据库等工具。

JET (Joint Engine Technology) :数据连接性引擎技术, 是一种基于工作站通过DAO的数据库访问机制。虽然可以通过微软Access提供的ODBC驱动程序访问Jet数据库, 但使用这些驱动程序在功能上有所限制。Jet机制有自己的查询和结果集处理功能, 并可对同种或异种数据源作查询处理。

ODBC (Open Database Connectivity) :开放式的数据库连接, 是一种公认的关系数据源的接口界面。提供统一接口的界面, ODBC对任何数据源都未作优化。

ODBC Direct:是一种基于DAO对象的新的DAO模式, 其方法和属性与RDO功能相同。使用在有DAO代码存在的场合, 可用来访问远程数据源。

OLEEDB:是一种底层数据访问界面接口。是用于第三方驱动程序商家开发输出数据源到ADO技术的应用程序或用于C++的开发者开发定制的数据库组件。OLE DB不能被VB直接调用。

RDC (Remote Data Control) :远程数据访问控件, 是一种对RDO数据绑定的控件。可以输出特定的结果集到数据源控件。

RDO (Remote Data Objects) :远程数据对象, 远程数据对象和集合为使用代码来创建和操作一个远程ODBC数据库系统的各个部件提供了一个框架。对象和集合都具有描述数据库的各个部件特征的属性以及用来操作这些部件的方法。可以在对象和集合之间建立起关系, 这些关系就代表了数据库系统的逻辑结构。RDO是ODBC API的一个浅层界面接口。是专为访问远程ODBC关系数据源而设计的。

VBSQL:是Visual Basic结构化查询语言。是一种基于API的接口方法, 几乎与C的DB-Library API相同, VBSQL只支持微软的SQL Server。VBSQL快而且轻但不支持对象界面。

3. VB访问数据库的方法

VB访问数据库的方法很多, 一般情况下分成三大类, 而每一类又有很多方法。下面列出每一类, 及每一类包含的方法。

(1) 数据控件法

数据库绑定控件来实现数据的输入、显示、筛选等接口界面。VB支持多种数据源访问控件, 在VB和COM界面接口之间起着媒介作用。这些控件提供了一种减少代码实现数据访问的途径。程序员可以使用同样的对象、属性和方法来处理各种不同的数据库格式。也可从一种数据库格式变到另一种格式 (例如, 将本地的Microsoft Access数据库转换为网络上的SQL Server数据库) , 也可在单一的查询或报表中连接来自多个不同数据库的表。

(2) 数据库存取对象变量 (Data Access Object Variable)

使用DAO访问数据库的对象和方法。

(3) 数据接口法

目前在VB6中有效的数据访问接口方法中, 有些是简单的应用程序接口界面 (APIs) , 有些是组件对象模型界面 (COM) 。这两类数据库接口界面事实上在任何一种开发语言中都包括。

三、总结

近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样, Visual Basic访问数据库的解决方案面临诸多挑战。为此Microsoft提出一种新的数据库访问策略, 即“统一数据访问” (Universal Data Access) 的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源, 提供独立于开发工具和开发语言的简单的编程接口, 这些技术使得企业集成多种数据源、选择更好的开发工具应用软件、操作平台、建立容易维护的解决方案成为可能。“统一数据访问” (Universal Data Access) 的基础是Microsoft的数据访问组件。这些组件包括ActiveX Data Objects (ADO) 、Remote Data Service (RDS也称“高级数据连接器”或ADC) 、OLE DB和ODBC。总之, 在VB中访问数据库的方法很多, 根据具体的环境、条件、要求而采用适当的方案。

参考文献

[1].冷向君.Visual Basic中文版入门与提高[M].北京:清华大学出版社, 1998

[2].李昭原, 罗晓沛.数据库技术新进展[M].北京:清华大学出版社, 1997

[3].Steven Holzner.Visual Basic6.0技术内幕[M].北京:机械工业出版社, 1997

[4].Jiawei Han, Miccheline Kamber.数据挖掘概念与技术[M].北京:机械工业出版社

数据库访问层范文

数据库访问层范文(精选7篇)数据库访问层 第1篇关键词:对象关系映射,数据访问,元数据,持久层引言ORM的全称是Object Relational Mappin...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部