gpt4 book ai didi

c# - 无法将 ADOX.Catalog.ActiveConnection 设置为来自 .NET 的 ADODB 连接

转载 作者:行者123 更新时间:2023-11-30 12:49:50 28 4
gpt4 key购买 nike

我的任务是将遗留 VB6 应用程序(使用 MS Access 作为数据库,不要问)增量移植到 .NET。

这会很长,但我认为最好提供一些背景信息。

此应用程序有一个带菜单的主 MDI 窗体,该菜单是根据应用程序文件夹中的 DLL 动态创建的。它基本上是一种插件:每个 DLL 都由一个菜单项表示,单击该菜单项将打开 DLL 中包含的主窗体,调用 SetParent()。根据需要。

MDI 表单是我的起点。我只想重写其中的一部分(当然,我会重新设计和进行单元测试)以便能够打开上述表格。一旦确定了那个,我将开始一次重写一个 DLL。

每个 DLL 都需要一个 ADO 连接,我已经能够从 C# 传递它。

问题是,其中一个插件(至少,但可能还有许多其他插件)使用 ADOX 在数据库上执行操作,问题就在这里:当我尝试将 ADOX.Catalog 的 ActiveConnection 属性设置为 ADO连接,我得到的只是运行时错误 3001:Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

我这辈子都弄不明白我做错了什么。

VB6 代码尽可能简单:

Dim c As New ADOX.Catalog
Set c.ActiveConnection = theAdoConnectionComingFromDotNet ' error!

创建 ADO 连接的 C# 代码与 VB 代码一样简单:

var conn = new ADODB.Connection();
conn.Open("Provider=Microsoft.JET.Oledb;[...]");

以及对 Open() 的调用成功。如果我尝试设置 ActiveConnection在 C# 端,像这样:

var catalog = new ADOX.Catalog();
catalog.ActiveConnection = conn;

一切正常。

现在,我可以通过简单地在 C# 端实例化 ADOX 并将其传递给 VB6 来解决这个问题,但是调整 VB6 代码(当然没有单个单元测试)可能被证明是一个 PITA,我我什至不确定一开始这样做是否容易(因为应用程序可以同时使用多个 Access 数据库,根据需要打开和关闭与每个数据库的连接)。

所以,有人知道我做错了什么吗?在 C# 中,我尝试从 .NET 选项卡和 COM 选项卡中引用 ADODB(我从 COM 选项卡中选择的 ADO 版本是正确的:2.5 ......再次,不要问),但仍然没有喜悦。

编辑

当我尝试将 RecordSet 的 ActiveConnection 属性分配给来自 C# 的连接时,会发生完全相同的事情,如下所示:

Dim rs As New ADODB.Recordset
Set rs.ActiveConnection = theAdoConnectionComingFromDotNet

由于 ActiveConnection 是一个变体,我能想到的另一个解决方法是将它设置为连接的 ConnectionString 属性。这行得通,但它每次都会创建并打开一个新连接,坦率地说,我不喜欢它。

最佳答案

这似乎是错误的方法,但这与我遇到的问题非常相似——ADO 在 COM 对象中停止工作,在 Win7 机器上重新编译然后在 XP 机器上使用——我认为这可能归结为一样的东西。即,broke MDAC ADO in COM objects 的灾难性 Windows 更新(很长的线程,预计加载缓慢)。如果是这样,官方修复可以是 found here .

如果不是那样并且您找不到解决方案,我认为您最好的做法是只使用您在编辑中提到的连接字符串解决方法。这并不理想,但你说你无论如何都要开始重写 DLL,所以这只是一个临时安排。

关于c# - 无法将 ADOX.Catalog.ActiveConnection 设置为来自 .NET 的 ADODB 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597741/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com