标题：uda
uda简介
1.简介UCA/UDA = Universal Cheerleader/Dance Association　　UDA是美国著名的啦啦舞协会，每年举办各种活动，包括全美啦啦舞锦标赛，美国各大学均积极参与该项赛事，该项赛事成为美国各高校，高中展示自己学校文化和校园氛围的舞台之一。各项体育赛事及啦啦舞表演是美国文化的重要组成部分。 uca/uda(4张)
2.统一数据读取,UDA( Universal Data Access)是微软所发展的资料库 (DATABASE) 存取方式，主要使用ADO作为存取界面。
3.一种压缩软件，据说比UHARC还厉害，仅次于WINRK
4. 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技术，你可以通过一个公共的界面集合来到达不同的数据源，比如我们可以使用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  Source = "Select * from Products"
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,注册表的位置如下：
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataFactory\HandlerInfo\safehandlerlist
客户端代码在打开一个ADO记录集的时候，必须在连接字符串中包含标签'handler=;'以便能够使用指定的句柄。如果使用RDS.Datacontrol来打开记录集的话，句柄属性必须设置为句柄的ProgID。服务器管理员可以强制RDS服务器使用句柄，当然需要在注册表的如下位置，插入HandlerRequired=1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataFactory\HandlerInfo
当该注册项被插入后，所有不包括'handler=;'的RDS请求都会被拒绝。同时必须指向一个有效的定制的句柄对象，这些对象在注册表的safehandlerlist处进行注册，具体位置和上面一样。
为了保证数据通讯的安全性，MDAC2.0安装了一个缺省的定制的句柄对象-MSDFMAP  HANDLER。这个句柄的行为是由  ini文件驱动的，称为Msdfmap   ini。该文件被安装在Windows目录下，服务器管理员能够配置该  ini文件，用来定制MSDFMAP  HANDLER的行为。需要注意的是，管理员可以配置多个  ini文件，如果使用一个不同的  ini文件的话，在客户端的连接字符串必须为如下的形式：
RDSCONTROL  Handler = "MSDFMAP  Handler,myOtherNameSpace  ini"
或者也可以为：
Rs  open "SQL命令", "Provider=MS Remote;Remote Server=MyWebServerSite;
Handler=MSDFMAP.Handler,myOtherNameSpace  ini;Data Source=CustomerDatabase"
最后需要说明的是，用户可以根据自己的需要定制句柄，句柄包含有两个方法：
GetRecordset：该方法产生一个新的ADO记录集，该记录集必须用 adLockBatchOptimistic的加锁类型打开，连接和记录集对象必须把游标位置设置为 adUseClientBatch。
Reconnect:该函数用来产生一个新的ADO连接对象，并且把ADO记录对象attach到它上面去。连接对象的游标位置必须为adUseClientBatch。
构想下面是UDA的构想示意图。
  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的数据存取组件
下面具体介绍uda的数据存取组件。
1  oledboledb是uda结构中最重要的组件，它是整个uda技术的基础。oledb是uda的底层的面向对象的数据存取界面，面向各种数据源，包括关系型数据库、isam、jet或其他任何数据。它被设计为一种开放的规范，以存取各类数据源，包括从主机系统到桌面应用的各类数据。从这一点上说，它的作用类似于odbc。
oledb定义了数据存取、操纵的界面，这些界面主要供开发数据库与数据库引擎的数据提供者（data provider）使用，他们编写出符合oledb规范的数据库接口，使uda能对他们的数据库进行存取。应用程序开发人员不必直接使用oledb，他们应该使用更方便的高层编程界面ado。
2  adoado是基于oledb上的高层编程界面，它提供了一致的，高执行效率的数据存取方法。实际上，对应用开发人员来说，uda就是ado，只需使用a?do就可以存取各种数据源了。
ado非常容易使用，因为调用它的方式是人们熟悉的ole automation界面。ado被设计为用来取代rdo和dao，因而它们之间是非常相似的，都是基于层次对象的，ado可以看作它们的超集。熟悉rdo、dao的开发人员可以很快学会ado。但有一点需要注意：ado不向后兼容rdo，它们不能在代码里混合使用，但它们之间的差别是非常小的。
3  rdsrds就是以前的adc，现在被集成到了ado中。为了区分adc与ado的关系，adc改为rds，它与ado使用同一个编程模型。
rds是一种新的web数据存取技术，它允许开发者在支持activex的浏览器中创建以数据为中心的应用。rds创建这样的框架，它允许与odbc数据源（包括企业内的intranet和整个inter?net）方便地交互。rds的工作原理是：首先把数据从数据库服务器中下载到本地的数据缓冲区，然后应用程序（或浏览器）通过rds操纵本地数据缓冲区中的数据，最后rds负责用缓冲区中的数据更新远程数据库中的数据，同时处理更新冲突。rds提供了下述优点：客户端的数据缓存、可更新的数据、并支持数据绑定的activex控件。
4  odbcodbc的历史已经有十几年了，大家非常熟悉，它也是应用最广泛的关系型数据库的界面，几乎得到了所有数据库厂商的支持。它是低层的界面，用来针对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