Asp中的MSSQL数据库访问:driver={SQL Server};与Provider = Sqloledb;的区别
2017-03-26 15:50
232 查看
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
=================================================
![](https://img-blog.csdn.net/20170326154956257?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ybTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以看到,如果是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提供程序.
打工作开始(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提供程序.
相关文章推荐
- Asp中的MSSQL数据库访问:driver={SQL Server};与Provider = Sqloledb;的区别
- Asp中的MSSQL数据库访问:driver={SQL Server};与Provider = Sqloledb;的区别
- [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- Sql Server每日一练-ASP访问数据库的几种方式
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL
- 配置msSQL中遇到的问题[Microsoft][ODBC SQL Server Driver][SQL Server]
- SQL Server 重建索引|索引重组|索引的碎片检查 (MSSQL个人笔记之数据库优化之路 六<SQL2005以上>)
- 在ASP中通过SQL访问ACESS数据库的方法
- asp Driver和Provider两种连接字符串连接Access时的区别
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝 (转)
- [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role
- asp Driver和Provider两种连接字符串连接Access时的区别
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL 网络接口, error: 26 - 定
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver Eclipse3.1 数据库连接测试程序(SQL Server 2000 Driver for JDBC Service Pack 3 安装测试)
- Error = [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝
- SQLserver2000〔Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server不存在或访问被拒绝