3

Oracle DataAccessClientを使用してOracleデータベースにクエリを実行する必要があるアプリケーションをVB.NETで作成しています。次に、SCAPIインターフェイスと呼ばれるものを使用して、データモデリングに使用するアプリケーションのメタデータにアクセスします。

フォームのボタンをクリックして実行される2つの関数に問題を単純化しました。

この関数は、フォームのボタンをクリックすると実行されます。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接続を開く必要はありません。OracleConnectionを定義するだけでエラーが発生します。

4

1 に答える 1

0

SCAPI.Applicationオブジェクトをグローバル変数として作成することで問題を解決しました。これにより、SCAPIは、データベースオブジェクトが実行する前に、必要なリソースをすべて取得します。SCAPIアセンブリとOracle/ODBCアセンブリが互いにうまく機能しない理由を正確に理解することができませんでした。

于 2012-10-05T18:27:13.653 に答える