写了一段非常简单的 VBScript 脚本, 就是读一个文件, 然后把相关内容存储到远程SQL Server 2005数据库中.
Set aConn = CreateObject("ADODB.Connection")
aConn.Open "Provider=SQLNCLI;Server=xx.xx.xx.xx;Database=dbname;UID=sa;PWD=thepwd"
... ...
strsql = "insert into tbl values(... ...)"
aConn.execute strsql
在本人的开发环境下, 运行正常. (需要说明一下, 在开发环境下, 安装了一个SQL Server 2005 Express Edition.)
然后将脚本转移到测试环境下. 报错.
Error: Provider cannot be found. It may not be properly installed.
Code: 800A0E7A
Source: ADO.Connection
说明一下,在测试环境下, 没有安装任何的数据库.
通过分析这个错误提示,可以看出来问题是出在了Provider上面, 而且测试环境下面的MDAC也是安装的最新的,不存在版本的问题.在网上找了些资料, 据说 SQL Server 2005 的数据库连接字符串中的Provider 要使用SQLNCLI,而SQL Server 2000下面使用SQLOLEDB,可现在使用的就是SQLNCLI啊?
仔细琢磨一下, 在开发环境下,由于已经安装了SQL Server 2005 Express Edition, 而测试环境下, 并没有安装任何版本的SQL Server. 换言之, 由于安装了 Express Edition, 而同时安装了 SQLNCLI 驱动器, 而MDAC 自带的并没有 SQLNCLI 驱动器, 只有SQLOLEDB 驱动器, 所以导致测试环境下 提示 Provider can not be found....
试验一下
aConn.Open "Provider=SQLNCLI;Server=xx.xx.xx.xx;Database=dbname;UID=sa;PWD=thepwd" 改为
aConn.Open "Provider=SQLOLEDB;Server=xx.xx.xx.xx;Database=dbname;UID=sa;PWD=thepwd"
测试成功! 看来我的猜测是对的?也只能这样给自己解释了. 没准我的猜测是错误的,只是碰巧问题解决了而已, 还望有高手给解释一下.
注:
Microsoft SQL Server 2000 下的连接字符串通常为:
Provider=SQLOLEDB;Data Source=server;Initial Catalog=database;User Id=user;Password=password;
或者
Provider=SQLOLEDB;Server=server;Database=database;Uid=user;Pwd=password;
Microsoft SQL Server 2005 下的连接字符串通常为:
Provider=SQLNCLI;Data Source=server;Initial Catalog=database;User Id=user;Password=password;
或者
Provider=SQLNCLI;Server=server;Database=database;Uid=user;Pwd=password;