更新时间:2024-01-08 20:35
1.统一数据读取,UDA( Universal Data Access)是微软所发展的资料库 (DATABASE) 存取方式,主要使用ADO作为存取界面。 2.一种压缩软件,据说比UHARC还厉害,仅次于WINRK 3. UDA是Upper Deck Authenticated的缩写,是美国UD公司运动收藏品牌,专门推出顶级运动员亲笔签名产品。
UDA(universal data access,通用数据访问,也叫全局数据访问)是microsoft为企业应用范围内各种类型信息存取所制定的一项新战略,它提供对多种数据源进行存取的一致界面。说起数据存取界面,microsoft以前是最令人感到混乱和迷惑的了。从早期的db-library到广为接受的odbc,及至近年来基于对象的dao(data access obejct,数据存取对象),rdo(remote data object,远程数据对象),dao/odbcdirect(dao/odbc直接存取),ado(activex data object,活动数据对象),给用户的选择带来了麻烦,而各种技术之间互不通用,也使得每选择一种存取界面都要重新学习,加重了开发人员的负担。因此,uda技术的出现将会结束这种混乱局面。今后只要使用uda即可,而不必劳神费力地在那些存取界面上选择了。
uda可以看作是应用程序和各种数据之间的一个中间层:uda一方面可以对各种类型的数据源进行高效存取,同时又提供一个独立于编程语言、开发工具的统一编程界面。这样,企业可以选用他们所熟悉的,容易使用的开发工具把分散的、完全不同的各类数据源集成起来,创建容易易维护,功能强大的应用程序。
技术
uda并不是一种全新的技术,它是由microsoft以前各种数据存取界面加以综合发展而来的,并遵循microsoft最新的dcom规范。它的技术基础是odbc、rdo、dao等这些成熟的,广泛使用的技术。因此uda以得到业界广泛支持的工业标准为基础,所以能够和各主要的数据库平台一同工作,同时因而容易学习,便于使用。
uda实际是由microsoft的一些数据存取组件(data access components)组成的,它的各个组件用于各种特定的目的,而uda则定义了一种协同工作的机制。这些组件包括activex data object(remote data service,rds,以前称为advanced database connector,adc),oledb和odbc,其中最重要的是oledb和ado。oledb提供了对底层各种数据源的存取界面,面向数据提供者;ado则向应用程序提供了统一的数据存取界面,面向应用程序开发人员。
综述
微软提供了UDA技术作为一个解决方案来解决从多个数据源中操作数据的问题。通过使用UDA技术,可以通过一个公共的界面集合来到达不同的数据源,比如可以使用UDA来操作关系数据库(比如SQL SERVER,ORALCE)、文本文件、电子邮件、目录服务中的目录系统、OFFICE文档等等。
UDA包括了一个软件组件的集合用来和应用程序以及本身进行交互。UDA是基于COM之上的,所以UDA技术是和位置无关、语言无关,并且各个版本都是健壮的。MDAC是UDA的关键的实现。MDAC包括了ADO、OLE DB、ODBC、DAO、RDS等组件。ADO可以看成是OLE DB的上层,ODBC只能支持关系数据库,可以认为是一种过时的技术,DAO主要是用来和ACCESS数据库进行沟通,RDS是用来在服务器和客户机之间通过ADO进行记录集的传送,在基于Web的应用中大有作为。
如果大家经常从事在Windows下的数据库方面的开发工作的话,对ADO、OLE DB、DAO等一定已经不陌生,但是对RDS不一定非常熟悉,因为它主要是用在基于Internet的体系架构上的,所以有必要介绍一下RDS。
当前最新的RDS的版本是2.0,如果使用的IIS是4.0版本的话,RDS的版本是1.5的,注意只有在安装了IIS以后,系统才会带有RDS组件。RDS的目的就是让ADO的消费者能够通过远程的OLE DB提供者来获取数据,ADO消费者实际上是通过HTTP或者DCOM协议和数据提供者进行联系的,客户端应用可以选择直接和远程机器上的OLE DB提供者进行交互,或者是通过和远程机器上的COM控件进行交互,发出查询,接收结果集合。
当采用和OLE DB提供者直接交互这种模式的时候,客户端应用需要提供给数据提供者需要的所有信息,比如连接字符串和命令字符串。客户决定需要工作的特定的数据源和需要执行的特定的命令,服务器端把结果(一般是一个ADO Recordset结果集)返回给客户.
当采用和COM组件(该组件使用ADO记录集)交互的模式的时候,客户端应用程序激活中间件暴露出来的方法,然后把ADO Recordset作为一个参数进行传递,这里表示层和用户界面层驻留在客户端,业务逻辑层就驻留在中间件(COM组件)上,数据和引用一致性检查就在数据源端进行。这是真正的基于多层的开发模式.
在RDS2.0中有了新的内容,那就是开发人员可以直接写他们自己的服务器端的商业逻辑,同时能够使他们的客户端直接和远程OLE DB提供者相连而不需要通过商业对象层。 这样,Web服务器管理员能够直接管理从RDS客户端到来的要求和OLE DB数据源联系的请求、并且能够通过定制的句柄(handler)进行商业逻辑检查,所谓商业逻辑检查包括数据有效性检查等等,它们能够通过RDS被加到应用程序上去。服务器管理员可以很容易的编写他们自己的定制的处理逻辑,为了帮助管理员使用这个定制的特征,一个简单的处理句柄(handler)已经被加到了所有基于SQL的OLE DB提供者上。句柄的行为是通过安装在服务器上的 ini文件进行控制的。
当RDS被用来以客户端应用程序和远程OLE DB提供者之间直接通讯的模式操作的时候,WEB服务器上的一个RDS DataFactroy对象用来处理客户端请求。DataFactory对象实现一个称为Query的方法来打开一个新的记录集,它也能够通过SubmitChanges方法改变记录集。
在RDS2.0中,DataFactory方法能够通过编写一个客户端对象的方法进行增强,它实现了一个特定的称为IDataFactoryHandler的接口,开发人员可以建立他们自己的定制的对象来实现IDataFactoryHandler接口。然后这些对象能够显式的被DataFactory方法调用来扩展缺省的功能。具体的示例代码如下:
AdorRs ActiveConnection =
Handler=MyHandler obj;Provider=MS Remote;Remote Server=网址;
DSN=TTMIS_CW;
AdorRs Open
在上面的代码段中,开发人员可以指定在服务器端的缺省句柄对象为MyHandler obj。当这段代码被执行的时候,服务器缺省的调用DataFactory对象。但是,在DataFactory对象的方法Query打开一个记录集的时候,它通过调用接口IDataFactoryHandler来创建MyHandler obj对象,在这个接口中,它调用GetRecordset或者是Reconnect方法,传递连接和命令字符串。在句柄的客户代码部分能够打开一个ADO连接或者是记录集并把它传递给对象DataFactory,这样用户就可以使用句柄内部的ADO事件来定制连接或者是记录集对象
当客户端代码使用RDS的时候,如果没有指定句柄的话,DataFactory执行客户查询,DataFactory使用ADO和OLE DB提供者进行交互。当客户端代码指定了句柄的时候,客户端请求仍然由DataFactory对象执行,然后DataFactory对象轮流使用指定的句柄来处理客户的请求。
一个RDS服务器的客户端句柄是一个COM自动化对象用来实现IDataFactoryHandler接口,它必须由在注册表中注册的ProgID,注册表的位置如下:
客户端代码在打开一个ADO记录集的时候,必须在连接字符串中包含标签'handler=;'以便能够使用指定的句柄。如果使用RDS.Datacontrol来打开记录集的话,句柄属性必须设置为句柄的ProgID。服务器管理员可以强制RDS服务器使用句柄,当然需要在注册表的如下位置,插入HandlerRequired=1
当该注册项被插入后,所有不包括'handler=;'的RDS请求都会被拒绝。同时必须指向一个有效的定制的句柄对象,这些对象在注册表的safehandlerlist处进行注册,具体位置和上面一样。
为了保证数据通讯的安全性,MDAC2.0安装了一个缺省的定制的句柄对象-MSDFMAP HANDLER。这个句柄的行为是由 ini文件驱动的,称为Msdfmap ini。该文件被安装在Windows目录下,服务器管理员能够配置该 ini文件,用来定制MSDFMAP HANDLER的行为。需要注意的是,管理员可以配置多个 ini文件,如果使用一个不同的 ini文件的话,在客户端的连接字符串必须为如下的形式:
或者也可以为:
Handler=MSDFMAP.Handler,myOtherNameSpace ini;Data Source=CustomerDatabase
最后需要说明的是,用户可以根据自己的需要定制句柄,句柄包含有两个方法:
GetRecordset:该方法产生一个新的ADO记录集,该记录集必须用 adLockBatchOptimistic的加锁类型打开,连接和记录集对象必须把游标位置设置为 adUseClientBatch。
Reconnect:该函数用来产生一个新的ADO连接对象,并且把ADO记录对象attach到它上面去。连接对象的游标位置必须为adUseClientBatch。
构想
下面是UDA的构想示意图。
发展前景
uda作为microsoft企业范围内信息存取的新战略,得到microsoft的极大重视,有着广阔的发展前景。最近,各大软件厂商如sybase、informix、intersolv、ca等均表示支持microsoft的uda技术,说明有着广泛的应用前景。
microsoft近来提出了“分布式internet应用程序结构”(windows distributed internet applications architecture,dna),作为创建能通过网络传送的可伸缩的多层(multitier)分布式计算解决方案。uda结构的中心元素,它提供一致的、独立于工具和编程语言的高级数据界面,统一了client/server、web和各种其他的数据存储和读取技术,支持用户以统一的方式对结构化和非结构化进行存取。
对于应用程序开发人员来说,uda中的高级编程界面ado将成为他们存取各类格式信息的强有力工具。uda的发展,将导致一项新的数据存取结构。在这种结构下,前端应用程序是一致的、通用的,与后端数据库的具体存取方法相分离;同时后端的信息源可以千差万别,只要它们都遵循oledb规范,就可以被前端应用程序存取。
对于开发工具供应商,uda技术的采用可以使他们为他们的客户提供广泛的数据存取,帮助他们建立功能更丰富、更强健的应用。而dbms厂商更可以利用uda技术为他们的dbms引擎和数据库提供额外的高效客户端,从而扩大用户的选择范围。
无疑,uda这种通用的存储结构,对于降低应用程序开发成本,提供应用程序的可维护性,进而增强企业的竞争力,获得最大的商业利益,具有极其重要的作用。那么,应当什么时候转向uda(或是ado)呢?是不是把现有应用程序都转换为采用ado呢?在这里笔者提出两点建议:
(1)如果用户正在运行的应用程序采用的是rdo技术,那么采用rdo就行了,没有必要把它们转换到ado。因为microsoft会继续支持rdo,而且对大多数应用来说,rdo是完全满足需要的。
(2)如果用户打算开发新的应用程序,那么就应该采用ado。采用新的具有广阔发展前途的技术,会带来巨大的收获。
下面具体介绍uda的数据存取组件。
oledb是uda结构中最重要的组件,它是整个uda技术的基础。oledb是uda的底层的面向对象的数据存取界面,面向各种数据源,包括关系型数据库、isam、jet或其他任何数据。它被设计为一种开放的规范,以存取各类数据源,包括从主机系统到桌面应用的各类数据。从这一点上说,它的作用类似于odbc。
oledb定义了数据存取、操纵的界面,这些界面主要供开发数据库与数据库引擎的数据提供者(data provider)使用,他们编写出符合oledb规范的数据库接口,使uda能对他们的数据库进行存取。应用程序开发人员不必直接使用oledb,他们应该使用更方便的高层编程界面ado。
ado是基于oledb上的高层编程界面,它提供了一致的,高执行效率的数据存取方法。实际上,对应用开发人员来说,uda就是ado,只需使用a?do就可以存取各种数据源了。
ado非常容易使用,因为调用它的方式是人们熟悉的ole automation界面。ado被设计为用来取代rdo和dao,因而它们之间是非常相似的,都是基于层次对象的,ado可以看作它们的超集。熟悉rdo、dao的开发人员可以很快学会ado。但有一点需要注意:ado不向后兼容rdo,它们不能在代码里混合使用,但它们之间的差别是非常小的。
rds就是以前的adc,现在被集成到了ado中。为了区分adc与ado的关系,adc改为rds,它与ado使用同一个编程模型。
rds是一种新的web数据存取技术,它允许开发者在支持activex的浏览器中创建以数据为中心的应用。rds创建这样的框架,它允许与odbc数据源(包括企业内的intranet和整个inter?net)方便地交互。rds的工作原理是:首先把数据从数据库服务器中下载到本地的数据缓冲区,然后应用程序(或浏览器)通过rds操纵本地数据缓冲区中的数据,最后rds负责用缓冲区中的数据更新远程数据库中的数据,同时处理更新冲突。rds提供了下述优点:客户端的数据缓存、可更新的数据、并支持数据绑定的activex控件。
odbc的历史已经有十几年了,大家非常熟悉,它也是应用最广泛的关系型数据库的界面,几乎得到了所有数据库厂商的支持。它是低层的界面,用来针对sql server、oracle等关系型数据库系统提供统一的编程界面。在uda中,odbc通过oled bprovider for odbc集成到oledb中。
uda在internet/intranet上的应用
uda不仅能在企业内部的intranet上得到有效应用,而且在整个internet上也可大显身手。不论internet还是in tranet,它们包含了各类信息源的复杂组合,所有的信息都能通过浏览器浏览,在这里uda大有用武之地。以前在internet/intranet上开发数据库应用比较困难,现在通过uda可以方便地进行开发。
从uda的各组件在internet数据存取中可以看到,浏览器有两种方式对远程数据进行存取:
一种方式是:浏览器对数据的存取要求经过网络传到相应站点的iss(internet information server)服务器,然后由iis服务器使用ado来完成对各类数据源的数据的存取。这实际上就是microsoft大力推广的活动服务器页面技术(activex server pages,asp)。所谓asp技术,简单地说就是对microsoft的iis在服务器端的一种扩展,它允许基于web的应用程序的开发人员编写服务器端的脚本以扩展基于web的应用程序的能力。服务器端的脚本可以用vb script来写,也可以用别的脚本语言来写。这些用高级语言编写的脚本在服务器端运行,所以它们不依赖于任何客户端的操作系统或浏览器。
另一种方式是:浏览器对数据的存取要求直接通知给客户端的adc(rds),然后由adc通过服务器端的oledb把所需的数据下载到客户端本地的数据缓冲区中,由adc管理本地的数据缓冲区中的数据,并负责与浏览器进行交互,最后adc使用本地的数据缓冲区中的数据对远程数据源进行更新。这与传统的客户/服务器结构模式是非常类似的。
相应地,使用uda开发internet/intranet数据库应用,即可在客户端进行(通过adc),也可在服务器端进行(通过ado与oledb)。下面加以简要介绍。
方法1:在服务器端建立ado页面。
建立ado页面是基于vb script的,与visual basic for application的开发是非常相似的。步骤如下:
·要创建ado中的adodb对象;
·打开与adodb对象的连接;
·在打开的连接上创建数据结果集,对数据结果集里的数据进行操作;
·关闭连接。
下面是一小段程序代码,用以说明上述步骤:
setconn=server createobject
(″adodb connection″)
conn open ado samples
setrs=conn.execute(″select for mauthors″)
方法2:在客户端建立adc页面
建立adc页面同样是基于vb script的,但它是“重客户端”结构,类似于传统的客户/服务器结构模式,并且还需要客户端的activex控件。建立的过程与vb的form的设计过程非常类似;数据控件用来管理连接;把别的对象绑定到数据控件上;数据控件处理数据集的移动。
建立adc页面的步骤为:要增加adc对象;创建所需的数据绑定的控件;编写客户的代码。
MSDASDK新版本特点介绍
1 OLE DB和ADO可以被用来支持半结构化的数据,主要包括:
1.层次结构的数据存储(比如文件系统,邮件系统,目录服务,文档存储等等)
2.能够通过URL直接和对象进行绑定
3.增强了和XML的集成能力,主要包括:
1.把层次化的记录转换成XML格式形式保存
2.能够把记录集保存到一个流(stream)中而不仅仅是磁盘文件中
3.和ASP的Response和Request对象相集成,保存ADO记录集
2.增强了ADO错误报告能力
3. ADO MD用户能够提取通过模式对象而不需要初始化和遍历CubeDe