Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ プログラミング » データベースおよびアプリケーションの配備 » クライアントアプリケーションを配備するための要件 » OLE DB と ADO クライアントの開発

 

OLE DB プロバイダのカスタマイズ

OLE DB プロバイダをインストールする場合は、Windows レジストリの変更が必要です。通常、変更には OLE DB プロバイダに組み込まれている自己登録機能を使用します。たとえば、Windows regsvr32 ツールを使用することができます。レジストリエントリの標準セットは、プロバイダによって作成されます。

一般的な接続文字列では、コンポーネントの 1 つは Provider 属性になります。SQL Anywhere OLE DB プロバイダを使用することを示すには、プロバイダの名前を指定します。次に Visual Basic の場合の例を示します。

connectString = "Provider=SAOLEDB;DSN=SQL Anywhere 16 Demo"

ADO か OLE DB または両方を使用する場合には、プロバイダを名前で参照する方法が数多く存在します。次に示すのは C++ の例で、プロバイダ名の他に使用バージョンも指定しています。

hr = db.Open(_T("SAOLEDB.16"), &dbinit);

プロバイダ名は、レジストリで検索されます。使用コンピュータシステムのレジストリを確認すると、HKEY_CLASSES_ROOT に SAOLEDB のエントリが見つかります。

[HKEY_CLASSES_ROOT\SAOLEDB]
@="SQL Anywhere OLE DB Provider"

そこには、プロバイダに対して 2 つのサブキーがあり、クラス識別子 (Clsid) と現在のバージョン (CurVer) が指定されています。次に例を示します。

[HKEY_CLASSES_ROOT\SAOLEDB\Clsid] 
@="{41dfe9f7-db91-11d2-8c43-006008d26a6f}" 

[HKEY_CLASSES_ROOT\SAOLEDB\CurVer]
@="SAOLEDB.16"

同様のエントリが他にもいくつかあります。これらは、OLE DB プロバイダの特定のインスタンスを識別するために使用されます。レジストリで HKEY_CLASSES_ROOT\CLSID の下の Clsid を探し、そのサブキーを見ると、エントリの 1 つでプロバイダ DLL のロケーションが指定されていることがわかります。

[HKEY_CLASSES_ROOT\CLSID\
{41dfe9f3-db91-11d2-8c43-006008d26a6f}\
InprocServer32]

@="c:\\sa16\\bin64\\dboledb16.dll"
"ThreadingModel"="Both"

ここで問題になるのは、これが融通の利かない構造であることです。SQL Anywhere ソフトウェアをシステムからアンインストールすると、OLE DB プロバイダのエントリがレジストリから削除され、プロバイダ DLL がハードドライブから削除されます。これにより、削除するプロバイダに依存しているアプリケーションが動作しなくなります。

同様に、さまざまなベンダー製のアプリケーションが同じ OLE DB プロバイダを使用している場合、そのプロバイダをインストールするたびに、共通レジストリ設定が上書きされます。アプリケーションの動作に必要なプロバイダのバージョンが、別の新しい (または古い) バージョンのプロバイダに置き換わる可能性があります。

このような状況によって不安定な状態が生じるのは望ましくありません。この問題に対応するため、SQL Anywhere OLE DB プロバイダはカスタマイズが可能になっています。


OLE DB プロバイダのカスタマイズ