前回 .net対応製品に、ADODB.Recordset が残っている話を書いたのですが、事情があるようでした。
該当するパッケージは VS2005だけが対象ではなく、 Excel VBAも対象としている由。
データエントリーやデータ開示部分をフロントエンジンとして Excel_VBAで可能というのも売り文句の一つだそうです。
これを実現するには、EXCELから呼ばれる口をCOMにするか、相互運用を使って.net Nativeで作るかのどちらかになります。
旧VB版の資産を考えると口はCOMにしたほうがコスト的に低いと判断し、インターフェースはCOMにした模様。
そのため、橋渡しするObjectはADODB.Recordsetになった由。
Recordsetは Openした状態で使用する仕様みなので、呼び出し元で rs.Openしてデータをセットして、Openした状態で引数渡しする仕組みになってます。
事情は解ります。しかし、今時点から振り返ると古色蒼然に写ります。どうも落ち着かない。
直接IOする場合は、Openしたハンドルを引き渡すことがありますが、汎用メソッドの引数に、Open状態のインスタンスを渡すのは違和感を感じます。(動作的にはおかしくはないのですが)
COMを使うとパフォーマンスが2桁遅い上に、分散Transactionも使えないので、手動ロールバックの仕組みを考えないといけないし。....マイナス要素が多いと感じます。
VB6が終焉を迎えようとしていますが、VBAは当分現役の様子です。ということは、上記のパッケージのように、Office製品をフロントエンドに考えている製品を考えると、.net化の推進は難しいということなのかなぁ。
.net化の足をofficeが引っ張っている構図に感じるのは私だけ?