关于OLEDB和的思考

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
关于OLEDB和.NET的思考

你我并不相识。不过,面对一个实实在在的问题“到底是什么?”,我却没有合适的答案。

设想一下这样一个场景:在一个旅游纪念品商店,你正专注于购买一些没用的东西(主要是纪念品),以便让到机场接你的朋友和亲戚感到开心。这时,往往会有人问你:“第一次来吗?出差还是度假?”

所以,如果你是在做和软件有关的事,而不是在度假,那你就不得不面对这个现实的问题。

那么,软件到底是什么?

回答这种关于存在的问题是很困难的,尤其是如果此时你正在闲逛,背着一背包明信片、考拉图片和袋鼠玩具,包上还印着防鳄鱼的黄色警告标志。

我努力使自己的思维自由而又尽量简单。首先,软件是跟计算机相关的。软件也和演变有关。当然,软件还与数据(特别是数据存储和操作)有关。

回到旅馆后,我仍在思考下面的问题——关于数据的存储和使用,我近年来观察到了怎样的演变?于是,我开始思考OLEDB及其在.NET方面的演变。
软件进化论
从历史角度来说,ODBC进行了第一次严肃尝试:它试图创建一种统一的应用程序访问的途径。像软件中的其他东西一样,ODBC的目的是满足某种特定的需要。在信息技术永无止境的进化进程中,它开创了一个新阶段。

ODBC必须提供一个公用的(最好是抽象的)API,用来访问数据库,而不用考虑数据库的内部细节、语言和表的组织。但是,随着时间的推移,人们发现,面对新的数据驱动应用程序的设计与构造方法,ODBC越来越无法成功地满足需要。

软件也有自己的进化论。ODBC以不同的名称、不同的模型和新的功能适应了变化,生存了下来,同时又保持了它的真正使命。ODBC继续以OLEDB的名称和功能提供(或多或少地)开放式数据库连接的功能。

OLEDB作为一种编程接口,将Microsoft通用数据访问(UDA)策略的理论概念应用于实践。UDA能够通过基于COM的单一编程接口来访问各种类型的数据,包括关系型、非关系型和层次结构型数据。

OLEDB是作为一种组件技术而设计的,其特点是采用了多层模型。在COM桥的一侧是用于保留数据的服务器组件,另一侧则是了解如何连接和请求数据的客户端组件。前者称作OLEDB数据提供者;而后者则称作OLEDB使用者。

使用者和提供者都是COM对象,并能够通过一套COM接口互相通信。这种基于COM的通信可被概括为在抽象对象(如DataSource、Session、Command和Rowset)上执行的操作。因此,当使用者连接到DataSource,打开Session,发出Command,并返回数据Rowset时,便会出现这种情况。

ODBC的这一进化使UDA和OLEDB添加了一种功能,这种功能就像一个简单的关系表一样,将所有的企业数据粘合在一起,不论它们是关系型、非关系型还是层次结构型。
OLEDB模型
说到数据访问,我们有两种基本选择。一种是像UDA允许的那样,采用通用数据访问策略。另一种则倾向于使用通用数据结构。它强行将现有的所有信息从当前的数据存储区移动到一个能包容所有数据类型的数据库服务器。

使用OLEDB,需要将客户所有的信息粘合在一起。另一种方式是,强行将客户端升级至新的、更强大的、唯一的DBMS,而这个DBMS能够处理任何格式的信息。

与ODBC相比,OLEDB对数据物理结构的依赖更少。此外,它不必严格基于SQL。OLEDB命令可以是SQL语句,也可以是其他的一些东西。总的说来,可以将它们看作以任何能够为目标提供者理解的语法写成的文本字符串。

像ODBC一样,OLEDB采用的概念进行设计,以尽可能提高中间层模块数据访问的性能。基于同样的原因,OLEDB不能直接在®或中使用。

而不计其数的分布式系统却是使用VisualBasic来生成组件的。这就是Microsoft引入ActiveX®数据对象(ADO)库的主要原因。

ADO的编程接口比原始的OLEDBSDK更加丰富。虽然在C++应用程序中使用ADO是完全可行的,但是OLEDB调用经过的代码层次较少,与相应的ADO代码相比,能更直接地到达数据。1 <script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭