打工作开始(2004年下半年),Asp能见到的两个数据库连接就是driver={SQL Server};或者Provider = Sqloledb;,它们都是用来连接MSSQL数据库的,一直没搞清楚它们的区别,反正程序中数据访问出问题,在排除一些常规因素后,把driver={SQL Server} 改成 Provider=SQLOLEDB 问题就奇迹般的解决了(也有可能是把后者改成前者,不过记忆里好象找不到). 有了ADO.NET更是很少再因为连接字符串问题而伤脑了,维护.net1.0跟.net2.0在数据库连接上(MSSQL)根本没什么区别.
不过最近碰到了一个asp程序(即使在今天,2009年)asp做的网站还是很普遍的, 原来系统采用的是ODBC提供程序(注意ODBC提供程序其本质是一个OLEDB,ODBC驱动跟ODBC提供程序是两个不同的概念),但是奇怪的是这个东西放到服务器上几乎远行不了,折腾半天后只能将ODBC提供改成SqloleDB提供,问题居然解决了.
今天又分别测试了下这两个不同的连接,居然都又可以正常使用,迷惑中了....
下面是关于ADO,OLEDB,sqlOledb,ODBC的一些说明,是这两天收集到的资料: =======================================
史前 那时候每个数据库供应商(其实也没几个) 都有自己的数据库操作API, 每个应用程序只能使用一个固定的数据库 想换数据库?没门!你要全部重新写 后来 X/OPEN和ISO(好像还有IBM)说 KAO,这么乱,程序员怎么活啊 于是提出了CLI(Call-Level Interface) 每个数据库的CLI(驱动程序)基本上相同, 程序员总算好过点了,可是要换数据库, 你写的程序需要重新编译(或许还要安装) 再后来 于是ODBC来了,它通过动态装载各个数据库的CLI 把函数调用转换成每个数据库的CLI调用 数据库应用程序总算和数据库供应商每什么关系了 再后来 MS提出了OLE,MS还有了自己的数据库 (Access/SQL Server) MS是老大,这个问题上当然要有自己的看法 要是还只是提供ODBC,那多没面子 所以提出了 OleDb,它通过COM接口调用 OleDb也需要每个数据库提供一个CLI (不过有了新名词,叫作Provider) MS 给 Access和SqlServer分别写了一个Provider 不过为了照顾使用ODBC的,也提供了一个ODBC的Provider 这样那些只提供ODBC的数据库也可以通过OleDb访问 不过这样效率就稍微低了(因为要经过两层么) 所以现在有些数据库会提供自己的Provider 再后来 MS说OleDb的接口太复杂了 程序员也就调调query 没必要搞这么复杂吧 于是提出了ADO,ADO 通过在OleDb上面封装 简化了使用方法,程序员在操作数据库上总算是解放了 新世纪终于到来了 MS也发明了.NET,为了适应新世纪新潮流 也提出了 ADO.NET =====================================可以看到,如果是ASP程序那基本上你用的就是ADO了,而ADO使用的就是OLEDB,你无法在VB,或asp中直接使用OLEDB,跟ODBC, 即使在C,C++中访问数据库的最好选择也是ADO,而不是直接操作,OleDB或ODBC, 既然我们使用的是Asp,而Asp中只能用ADO,那么ODBC的连接是什么呢? 在Asp中说的ODBC,其实指ODBC提供程序,其本质是一个OLEDB provider,通过这个provider我们访问数据库提供的ODBC接口(驱动),而ODBC接口再操作数据库. 这样跟直接使用sqlOLEDB相比其实是多了一层出来,看下图:
到这里,其实想说明的是,在ASP中我们说到ODBC其实指ODBC提供程序,更准确的说是,MS提供的ODBC提供程序.
<script xml:space="preserve" type="text/javascript"> google_ad_client = "pub-9768854185654179"; /* 468x60, 创建于 09-2-12 */ google_ad_slot = "6840815711"; google_ad_width = 468; google_ad_height = 60; </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" xml:space="preserve" type="text/javascript"> </script>