好吧,这是一个非常复杂的问题,我会尽力解释。
我们有一个像这样与 Sql Connection 通信的 C++ 应用程序:
CoCreateInstance(_T("ADODB.Connection"))
这很好用。
我们最近将所有后端代码都变成了一个 Com 对象。如果我编写一个 Vb 程序来加载我们的 Com 对象并执行一些数据库操作,一切正常,CoCreateInstance(_T("ADODB.Connection"))
仍然有效。
我们使用 fitnesse 进行测试,所以我写了一个 fixture:
1) 将一串vb代码输入到html页面中。
2) 编译vb代码
3) 运行使用我们的 Com 对象的 vb 代码。
* fitnesse 是一个 java 应用程序,因此代码路径也通过 Java 传播。
现在,当任何操作触及数据库时,Com 对象都会发生异常。使用消息框并删除代码我将问题缩小到这行代码:
CoCreateInstance(_T("ADODB.Connection"))
通常返回码是 0,但是通过这个代码链调用代码,我得到了返回码:800401F3,表示找不到要加载的对象。
我绞尽脑汁想弄清楚发生了什么。任何一点见解都将不胜感激。
最佳答案
它告诉您它在注册表中找不到 ProgId。这不是很健康,它是任何 Windows 安装上的一个非常标准的组件。验证这一点,启动 regedit.exe 并导航到 HKLM\Software\Classes\ADODB.Connection
如果缺少,则需要在该机器上安装数据库提供程序。从 Microsoft 下载 MDAC 2.8 安装程序并运行它。如果它没有丢失,那么您将遇到一个更神秘的问题,这可能与 64 位操作系统有关。然后查看 HKLM\Software\Wow6432Node。通过使用 SysInternals 的 ProcMon 工具查看它在注册表中戳的内容,获得额外的诊断。
关于c# - 无法创建具有复杂编程链的 ADODB.Connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568064/