微软提供了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=http://www.ttmis.com;DSN=TTMIS_CW;"
AdorRs.Source = "Select * from Products"
AdorRs.Open
在上面的代码段中,开发人员可以指定在服务器端的缺省句柄对象为MyHandler.obj。当这段代码被执行的时候,服务器缺省的调用DataFactory对象。但是,在DataFactory对象的方法Query打开一个记录集的时候,它通过调用接口IDataFactoryHandler来创建MyHandler.obj对象,在这个接口中,它调用GetRecordset或者是Reconnect方法,传递连接和命令字符串。在句柄的客户代码部分能够打开一个ADO连接或者是记录集并把它传递给对象DataFactory,这样用户就可以使用句柄内部的ADO事件来定制连接或者是记录集对象






