我在VB.NET中编写一个应用程序,要求我使用Oracle Data Access Client查询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 Connection会导致错误。
答案 0 :(得分:0)
我通过将SCAPI.Application对象创建为全局变量来解决问题。这会导致SCAPI在数据库对象执行之前获得所需的任何资源。我无法弄清楚为什么SCAPI和Oracle / ODBC程序集彼此不能很好地发挥作用。