遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

Asp中的MSSQL数据库访问:driver={SQL Server};与Provider = Sqloledb;的区别

   打工作开始(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提供程序.

 

 

posted on 2009-04-07 14:44  遗忘海岸  阅读(4708)  评论(0编辑  收藏  举报