Top / .NET備忘録 / 15.OracleInProcServerForVBS

OracleInProcServer.NET を改変して、COM サーバーを作成し、VB6.0 や VBA、VBScript で使えるようにしてみます。

ODP.NET は Oracle.ManagedDataAccess を NuGet で取得します。

■ 実装のポイント

■ コード



COM を作る手順

「Example COM Class (C# Programming Guide)」
[https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/example-com-class]

が参考になります。

実装部分のクラスに公開用インターフェイスとイベント用インターフェイスを作成して適用します。

イベントの無いクラスにはイベント用インターフェイスは不要です。

コネクション

oo4o は、OraDatabase の参照がなくなったとき、コネクションを切断しますが、.NET ではそれを検知できません。

.NET 用のように、OraDatabase クラスに OracleConnection を貼り付ける仕様にすると、コネクションの解放が出来なくなってしまいます。

なので、ODP.NET のプーリング機能を使用し、SQL 実行後、即座にプールへ返すようにします。

トランザクション実行中は、BeginTrans 〜 Commit/Rollback までコネクションを維持します。

性能について劣化は免れませんが、コネクションプールの性能に期待することにします。

遅延バインド

OraDynaset オブジェクトから OraField オブジェクトにアクセスする場合、

(1) dyn(Index)
(2) dyn.Fields(Index)

事前バインドできる VB6.0 や VBA では問題ありませんが、遅延バインドや VBScript で問題が出ます。

どうやら OraDynaset のメソッドを要求しているようなので、クラスに対応するメソッドを用意して対応します。

Decimal 型

文字型や日付型は問題ありませんが、VBScript は Decimal を数値として認識しません。

ADO に移行するとここが問題になるはず。

Decimal は String で返すことにします。

コンパイル

コンパイルは AnyCPU ではなく、x86 または x64 で行います。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2020-04-14 (火) 08:58:18 (42d)