c# - 无法创建具有复杂编程链的 ADODB.Connection

标签 c# c++ com ado fitnesse

好吧,这是一个非常复杂的问题,我会尽力解释。

我们有一个像这样与 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/

相关文章:

c# - UIElement 移动期间的奇怪行为。为什么?

c# - UI自动化和菜单项

c++ - 在 COM 自动化中 #import tlb 文件时出现编译错误

c# - 使用 Isolated COM 时应用程序在 CoCreateInstance 期间挂起

com - 内存不足错误 - 用于查找经典 ASP 内存泄漏的工具?

c# - 使用图形 API 通过 azure ad b2c 添加声明给用户

c# - 循环显示 5 个图像的动态图 block

c++ - 在编译时创建具有不同功能的同一类对象

c++ - SSE FPU 并行

c++ - 密码过滤器无法在 vs2012 中编译