通过VBA连接SQL Server报错3706提示Provider cannot be found问题咨询
报错核心原因及解决方案
1 直接触发原因
你当前连接字符串使用的SQLNCLI10对应SQL Server Native Client 10.0,是SQL Server 2008/2008 R2版本附带的专属驱动,当前64位运行环境没有正确安装对应版本、对应位数的该驱动,就会触发这个报错。
2 常见排查方向
- 确认Excel的实际位数:即使系统是64位,大部分默认安装的Office都是32位版本,驱动位数必须和Excel位数匹配,而非和系统位数匹配。查看路径:Excel界面点击「文件」→「账户」→「关于Excel」,顶部会明确标注32/64位。
- 确认驱动是否存在:打开对应位数的ODBC数据源管理器查看:
- 64位驱动查看路径:
C:\Windows\System32\odbcad32.exe - 32位驱动查看路径:
C:\Windows\SysWOW64\odbcad32.exe
切换到「驱动」选项卡,检查列表中是否存在「SQL Server Native Client 10.0」
- 64位驱动查看路径:
- 确认ADODB引用已配置:打开VBA编辑器,点击「工具」→「引用」,勾选「Microsoft ActiveX Data Objects x.x Library」(推荐选择6.1及以上版本)
3 快速修复方案
如果不想单独安装旧版Native Client驱动,可以直接替换连接字符串的Provider参数为系统自带的通用驱动:
方案A:使用系统默认预装的SQLOLEDB驱动(兼容性最高,无需额外安装)
Option Explicit Const SQLConStr As String = "Provider=SQLOLEDB.1;Server=XXX\XXX;Database=XXX;Trusted_Connection=yes;" Sub ConnectToDB() Dim PolicyDetails As ADODB.Connection Set PolicyDetails = New ADODB.Connection PolicyDetails.ConnectionString = SQLConStr PolicyDetails.Open PolicyDetails.Close Set PolicyDetails = Nothing End Sub
方案B:使用微软新版SQL Server OLEDB驱动(性能更好,支持高版本SQL Server新特性)
Const SQLConStr As String = "Provider=MSOLEDBSQL;Server=XXX\XXX;Database=XXX;Trusted_Connection=yes;"
内容的提问来源于stack exchange,提问作者Helena Viljoen
相关产品推荐
相关产品推荐

