3

我正在用 VB.NET 编写一个应用程序,它要求我使用 Oracle 数据访问客户端查询一个 Oracle 数据库。然后,我使用称为 SCAPI 接口的东西来访问我们用于数据建模的应用程序的元数据。

我已将问题简化为仅通过单击表单上的按钮执行的两个功能。

当我单击表单上的按钮时执行此功能。它创建了一个 oracle 连接,但实际上并不执行任何查询(因为我已将其余部分注释掉,但仍然出现错误):

Private Sub btnDisplayDirectories_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayDirectories.Click
    Dim ModelMart As String = "Data Source=...;User Id=...;Password=...;"
    Dim OraConn As New OracleConnection(ModelMart)
    OraConn.Open()
    OraConn.Close()
    OraConn.Dispose()
End Function

此函数只是使用 SCAPI 接口创建应用程序对象:

Private Sub btnOpenModel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)         Handles btnOpenModel.Click
    Dim oAPI As New SCAPI.Application
End Sub

如果我启动应用程序没有问题,首先单击 btnOpenModel,然后单击 btnDisplayDirectories。如果我单击 btnDisplayDirectories,然后单击 btnOpenModel,我会在 btnOpenModel 的第一行收到一条错误消息:

Retrieving the COM class factory for component with CLSID {2B2219EB-EDE7-49EE-BB89-5A0B4A398A63} failed due to the following error: 80004005.

我实际上已经尝试过了,我什至不必打开 Oracle 连接来得到这个错误,只需定义 Oracle 连接就会导致错误。

4

1 回答 1

0

我通过创建 SCAPI.Application 对象作为全局变量解决了这个问题。这会导致 SCAPI 在数据库对象之前获得它需要的任何资源。我无法弄清楚为什么 SCAPI 和 Oracle/ODBC 程序集不能相互配合。

于 2012-10-05T18:27:13.653 回答