ユニークな GUID のセットを生成し、プロバイダに命名し、ユニークな DLL の名前を選択して、アプリケーションと一緒に配備できるユニークな OLE DB プロバイダを作成します。
前提条件
この作業を実行するための前提条件はありません。
次のデータをテキストエディタにコピーし、.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" |
レジストリ値の名前の大文字と小文字は区別されます。
Microsoft Visual Studio の uuidgen ユーティリティを使用して、4 つの連続する UUID (GUID) を作成します。
たとえば、コマンドプロンプトで次のコマンドを実行します。
uuidgen -n4 -s -x >oledbs.txt |
4 つの UUID または GUID は、次の順番で割り当てます。
Provider クラス ID (下の表の GUID1)。
Enum クラス ID (下の表の GUID2)。
ErrorLookup クラス ID (下の表の GUID3)。
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 など)
エディタの検索/置換機能を使用して、テキストに出現する GUID1、GUID2、GUID3、GUID4 を対応する GUID に変更します (たとえば、uuidgen によって生成された GUID が上の表のような場合は、GUID1 を 41dfe9f3-db92-11d2-8c43-006008d26a6f に置き換えます)。
アプリケーションで接続文字列に使用するプロバイダ名を選択します (例:Provider=SQLAny)。
次の名前は SQL Anywhere によって予約されており、プロバイダ名として使用できません。
バージョン 10 以降 | バージョン 9 以前 |
---|---|
SAOLEDB | ASAProv |
SAErrorLookup | ASAErrorLookup |
SAEnum | ASAEnum |
SAOLEDBA | ASAProvA |
エディタの検索/置換機能を使用して、出現するすべての SQLAny という文字列を選択したプロバイダ名に変更します。置換対象には、長い文字列の一部として SQLAny が出現する箇所も含まれます (例:SQLAnyEnum)。
プロバイダ名を Acme としたとします。この場合に HKEY_CLASSES_ROOT レジストリに表示される名前を、比較しやすいように SQL Anywhere の名前とともに次の表に示します。
SQL Anywhere プロバイダ | カスタムプロバイダ |
---|---|
SAOLEDB | Acme |
SAErrorLookup | AcmeErrorLookup |
SAEnum | AcmeEnum |
SAOLEDBA | AcmeA |
SQL Anywhere プロバイダ DLL (dboledb16.dll と dboledba16.dll) のコピーを別の名前で作成します。
copy dboledb16.dll myoledb16.dll copy dboledba16.dll myoledba16.dll |
Windows Mobile の場合、dboledba16.dll はありません。
スクリプトにより、選択した DLL 名に基づく特別なレジストリキーが作成されます。ここでは、標準の DLL 名 (dboledb16.dll、dboledba16.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 |
エディタの検索/置換機能を使用して、レジストリスクリプトに出現するすべての myoledb16 と myoledba16 を選択した 2 つの DLL 名に変更します。
エディタの検索/置換機能を使用して、レジストリスクリプトに出現するすべての d:\\mypath\\bin32\\ を DLL のインストールロケーションに変更します。1 つのスラッシュを表すのにスラッシュを 2 つ重ねる必要があることに注意してください。この手順は、アプリケーションのインストール時にカスタマイズが必要です。
レジストリスクリプトをディスクに保存して、実行します。
新しいプロバイダを試します。新しいプロバイダ名を使用するよう ADO または OLE DB アプリケーションを必ず変更してください。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |