VB6编译程序在Windows Server 2012R2连接MySQL5.7.16时ODBC驱动报错
解决VB.exe在Windows Server 2012R2上连接MySQL时的ODBC驱动未找到问题
你的问题核心是VB编译的EXE找不到指定的ODBC驱动,但ASP Classic能正常连接,这大概率是「驱动位数不匹配」或者「驱动名称/版本不一致」导致的,下面给你一步步排查和解决的思路:
一、最可能的原因:32位/64位驱动不匹配
VB6默认编译出来的是32位程序,而Windows Server 2012R2是64位系统,ODBC驱动分32位和64位两个独立的环境:
- 64位驱动的管理入口是
C:\Windows\System32\odbcad32.exe - 32位驱动的管理入口是
C:\Windows\SysWOW64\odbcad32.exe
ASP能成功连接,很大概率是你的IIS应用池设置了「启用32位应用程序」,所以ASP用的是32位ODBC环境;而你的VB.exe直接运行时,会调用32位ODBC驱动,但服务器可能只装了64位的MySQL ODBC驱动,或者反过来。
排查步骤:
- 运行
C:\Windows\SysWOW64\odbcad32.exe(32位ODBC管理器),切换到「驱动程序」标签,看看有没有MySQL ODBC 5.3 Unicode Driver这一项。 - 如果没有,说明服务器没装32位的该版本驱动,下载对应版本的32位MySQL ODBC驱动安装即可。
- 如果有,继续往下排查。
二、检查驱动名称是否完全匹配
有时候服务器上安装的驱动名称和你代码里写的有细微差别,比如:
- 可能是
MySQL ODBC 5.3 ANSI Driver(而非Unicode) - 或者驱动版本号不同(比如服务器装的是5.7对应的ODBC驱动,名称是
MySQL ODBC 5.7 Unicode Driver)
排查步骤:
- 查看服务器上已安装的驱动名称:
- 32位驱动:打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI,找MySQL相关的键,看「Driver」对应的名称。 - 64位驱动:定位到
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI查看。
- 32位驱动:打开注册表编辑器,定位到
- 把代码里的驱动名称改成和注册表中完全一致的字符串,比如如果注册表显示是
MySQL ODBC 5.7 Unicode Driver,就把连接字符串里的DRIVER={MySQL ODBC 5.3 Unicode Driver};改成对应的名称。
三、用VBScript快速测试连接
写一个简单的VBS脚本,模拟VB程序的连接逻辑,方便快速验证问题:
Dim conn Set conn = CreateObject("ADODB.Connection") On Error Resume Next conn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};Server=127.0.0.1;Port=3307;UID=root;Password=Pass;Database=Database;OPTION=3;" If Err.Number <> 0 Then WScript.Echo "连接失败:" & Err.Description Else WScript.Echo "连接成功!当前驱动位数:" & (If CreateObject("Scripting.FileSystemObject").GetFile(WScript.FullName).ParentFolder.Name = "SysWOW64" Then "32位" Else "64位") End If conn.Close Set conn = Nothing
然后分别用32位和64位的脚本宿主运行:
- 32位:打开命令行,运行
C:\Windows\SysWOW64\cscript.exe test.vbs - 64位:运行
C:\Windows\System32\cscript.exe test.vbs
通过测试结果就能明确是哪个位数的驱动出了问题。
四、其他可能性(概率较低)
- 权限问题:如果VB.exe是用普通用户权限运行,可能无法读取ODBC驱动的注册表项,试试右键以管理员身份运行VB.exe。
- 驱动损坏:如果驱动已安装但仍报错,尝试卸载后重新安装对应位数的驱动。
内容的提问来源于stack exchange,提问作者Hanz Cheah




