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 プロバイダのカスタマイズ

ユニークな GUID のセットを生成し、プロバイダに命名し、ユニークな DLL の名前を選択して、アプリケーションと一緒に配備できるユニークな OLE DB プロバイダを作成します。

前提条件

この作業を実行するための前提条件はありません。

 ♦ タスク
  1. 次のデータをテキストエディタにコピーし、.reg ファイルとして保存します。



    REGEDIT4
    ; Special registry entries for a private OLE DB provider.
    [HKEY_CLASSES_ROOT\myoledb16] 
    @="Custom SQL Anywhere OLE DB Provider 16.0" 
    [HKEY_CLASSES_ROOT\myoledb16\Clsid] @="{GUID1}" 
    ; Data1 of the following GUID must be 3 greater than the 
    ; previous, for example, 41dfe9f3 + 3 => 41dfe9ee. 
    [HKEY_CLASSES_ROOT\myoledba16] 
    @="Custom SQL Anywhere OLE DB Provider 16.0" 
    [HKEY_CLASSES_ROOT\myoledba16\Clsid] @="{GUID4}" 
    ; Current version (or version independent prog ID) 
    ; entries (what you get when you have "SQLAny" 
    ; instead of "SQLAny.16") 
    [HKEY_CLASSES_ROOT\SQLAny] 
    @="SQL Anywhere OLE DB Provider" 
    [HKEY_CLASSES_ROOT\SQLAny\Clsid] 
    @="{GUID1}" 
    [HKEY_CLASSES_ROOT\SQLAny\CurVer] 
    @="SQLAny.16" 
    [HKEY_CLASSES_ROOT\SQLAnyEnum] 
    @="SQL Anywhere OLE DB Provider Enumerator" 
    [HKEY_CLASSES_ROOT\SQLAnyEnum\Clsid] 
    @="{GUID2}" [HKEY_CLASSES_ROOT\SQLAnyEnum\CurVer] 
    @="SQLAnyEnum.16" [HKEY_CLASSES_ROOT\SQLAnyErrorLookup] 
    @="SQL Anywhere OLE DB Provider Extended Error Support" 
    [HKEY_CLASSES_ROOT\SQLAnyErrorLookup\Clsid] 
    @="{GUID3}" 
    [HKEY_CLASSES_ROOT\SQLAnyErrorLookup\CurVer] 
    @="SQLAnyErrorLookup.16" 
    [HKEY_CLASSES_ROOT\SQLAnyA] 
    @="SQL Anywhere OLE DB Provider Assist" 
    [HKEY_CLASSES_ROOT\SQLAnyA\Clsid] 
    @="{GUID4}" 
    [HKEY_CLASSES_ROOT\SQLAnyA\CurVer] 
    @="SQLAnyA.16" 
    ; Standard entries (Provider=SQLAny.16) 
    [HKEY_CLASSES_ROOT\SQLAny.16] 
    @="Sybase SQL Anywhere OLE DB Provider 16.0" 
    [HKEY_CLASSES_ROOT\SQLAny.16\Clsid] 
    @="{GUID1}" 
    [HKEY_CLASSES_ROOT\SQLAnyEnum.16] 
    @="Sybase SQL Anywhere OLE DB Provider Enumerator 16.0" 
    [HKEY_CLASSES_ROOT\SQLAnyEnum.16\Clsid] 
    @="{GUID2}" 
    [HKEY_CLASSES_ROOT\SQLAnyErrorLookup.16] 
    @="Sybase SQL Anywhere OLE DB Provider Extended Error Support 16.0" 
    [HKEY_CLASSES_ROOT\SQLAnyErrorLookup.16\Clsid] 
    @="{GUID3}" 
    [HKEY_CLASSES_ROOT\SQLAnyA.16] 
    @="Sybase SQL Anywhere OLE DB Provider Assist 16.0" 
    [HKEY_CLASSES_ROOT\SQLAnyA.16\Clsid] 
    @="{GUID4}" 
    ; SQLAny (Provider=SQLAny.16) 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}] 
    @="SQLAny.16"
    "OLEDB_SERVICES"=dword:ffffffff 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}\ExtendedErrors] 
    @="Extended Error Service" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}\ExtendedErrors\{GUID3}] 
    @="Sybase SQL Anywhere OLE DB Provider Error Lookup" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}\InprocServer32] 
    @="d:\\mypath\\bin32\\myoledb16.dll" 
    "ThreadingModel"="Both" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}\OLE DB Provider] 
    @="Sybase SQL Anywhere OLE DB Provider 16.0" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}\ProgID] 
    @="SQLAny.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID1}\VersionIndependentProgID] 
    @="SQLAny" 
    ; SQLAnyErrorLookup 
    [HKEY_CLASSES_ROOT\CLSID\{GUID3}] 
    @="Sybase SQL Anywhere OLE DB Provider Error Lookup 16.0" 
    @="SQLAnyErrorLookup.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID3}\InprocServer32] 
    @="d:\\mypath\\bin32\\myoledb16.dll" 
    "ThreadingModel"="Both" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID3}\ProgID] 
    @="SQLAnyErrorLookup.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID3}\VersionIndependentProgID] 
    @="SQLAnyErrorLookup" 
    ; SQLAnyEnum [HKEY_CLASSES_ROOT\CLSID\{GUID2}]
    @="SQLAnyEnum.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID2}\InprocServer32] 
    @="d:\\mypath\\bin32\\myoledb16.dll" 
    "ThreadingModel"="Both" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID2}\OLE DB Enumerator] 
    @="Sybase SQL Anywhere OLE DB Provider Enumerator" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID2}\ProgID] 
    @="SQLAnyEnum.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID2}\VersionIndependentProgID] 
    @="SQLAnyEnum" 
    ; SQLAnyA [HKEY_CLASSES_ROOT\CLSID\{GUID4}] 
    @="SQLAnyA.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID4}\InprocServer32] 
    @="d:\\mypath\\bin32\\myoledba16.dll" 
    "ThreadingModel"="Both" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID4}\ProgID] 
    @="SQLAnyA.16" 
    [HKEY_CLASSES_ROOT\CLSID\{GUID4}\VersionIndependentProgID] 
    @="SQLAnyA"

    レジストリ値の名前の大文字と小文字は区別されます。

  2. Microsoft Visual Studio の uuidgen ユーティリティを使用して、4 つの連続する UUID (GUID) を作成します。

    たとえば、コマンドプロンプトで次のコマンドを実行します。

    uuidgen -n4 -s -x >oledbs.txt

    4 つの UUID または GUID は、次の順番で割り当てます。

    1. Provider クラス ID (下の表の GUID1)。

    2. Enum クラス ID (下の表の GUID2)。

    3. ErrorLookup クラス ID (下の表の GUID3)。

    4. Provider Assist クラス ID (下の表の GUID4)。最後の GUID は、Windows Mobile の場合の配備では使用されません。

    これらは連続していて、コマンドラインの-x オプションが行うことであることが重要です。

    各 GUID は次のように表示されます。

    Name GUID
    GUID1 41dfe9f3-db92-11d2-8c43-006008d26a6f
    GUID2 41dfe9f4-db92-11d2-8c43-006008d26a6f
    GUID3 41dfe9f5-db92-11d2-8c43-006008d26a6f
    GUID4 41dfe9f6-db92-11d2-8c43-006008d26a6f
    注意

    増分している GUID の最初の部分 (41dfe9f3 など)

  3. エディタの検索/置換機能を使用して、テキストに出現する GUID1、GUID2、GUID3、GUID4 を対応する GUID に変更します (たとえば、uuidgen によって生成された GUID が上の表のような場合は、GUID1 を 41dfe9f3-db92-11d2-8c43-006008d26a6f に置き換えます)。

  4. アプリケーションで接続文字列に使用するプロバイダ名を選択します (例:Provider=SQLAny)。

    次の名前は SQL Anywhere によって予約されており、プロバイダ名として使用できません。

    バージョン 10 以降 バージョン 9 以前
    SAOLEDB ASAProv
    SAErrorLookup ASAErrorLookup
    SAEnum ASAEnum
    SAOLEDBA ASAProvA
  5. エディタの検索/置換機能を使用して、出現するすべての SQLAny という文字列を選択したプロバイダ名に変更します。置換対象には、長い文字列の一部として SQLAny が出現する箇所も含まれます (例:SQLAnyEnum)。

    プロバイダ名を Acme としたとします。この場合に HKEY_CLASSES_ROOT レジストリに表示される名前を、比較しやすいように SQL Anywhere の名前とともに次の表に示します。

    SQL Anywhere プロバイダ カスタムプロバイダ
    SAOLEDB Acme
    SAErrorLookup AcmeErrorLookup
    SAEnum AcmeEnum
    SAOLEDBA AcmeA
  6. SQL Anywhere プロバイダ DLL (dboledb16.dlldboledba16.dll) のコピーを別の名前で作成します。

    copy dboledb16.dll myoledb16.dll
    copy dboledba16.dll myoledba16.dll

    Windows Mobile の場合、dboledba16.dll はありません。

    スクリプトにより、選択した DLL 名に基づく特別なレジストリキーが作成されます。ここでは、標準の DLL 名 (dboledb16.dlldboledba16.dll など) と名前が異なっていることが重要です。プロバイダ DLL 名を myoledb16 とすると、プロバイダは HKEY_CLASSES_ROOT でこの名前のレジストリエントリを探します。プロバイダスキーマ支援 DLL の場合も同様です。DLL 名を myoledba16 とすると、プロバイダは HKEY_CLASSES_ROOT でこの名前のレジストリエントリを探します。ユニークで、他人から選択されにくい名前にすることが重要です。次にその例を示します。

    選択された DLL 名 対応する HKEY_CLASSES_ROOT\name
    myoledb16.dll HKEY_CLASSES_ROOT\myoledb16
    myoledba16.dll HKEY_CLASSES_ROOT\myoledba16
    acmeOledb.dll HKEY_CLASSES_ROOT\acmeOledb
    acmeOledba.dll HKEY_CLASSES_ROOT\acmeOledba
    SAcustom.dll HKEY_CLASSES_ROOT\SAcustom
    SAcustomA.dll HKEY_CLASSES_ROOT\SAcustomA
  7. エディタの検索/置換機能を使用して、レジストリスクリプトに出現するすべての myoledb16myoledba16 を選択した 2 つの DLL 名に変更します。

  8. エディタの検索/置換機能を使用して、レジストリスクリプトに出現するすべての d:\\mypath\\bin32\\ を DLL のインストールロケーションに変更します。1 つのスラッシュを表すのにスラッシュを 2 つ重ねる必要があることに注意してください。この手順は、アプリケーションのインストール時にカスタマイズが必要です。

  9. レジストリスクリプトをディスクに保存して、実行します。

  10. 新しいプロバイダを試します。新しいプロバイダ名を使用するよう ADO または OLE DB アプリケーションを必ず変更してください。

結果

カスタム OLE DB プロバイダが設定されました。

次の手順

カスタム OLE DB プロバイダをアプリケーションと一緒に配備します。