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 (Deutsch) » SQL Anywhere Server - Programmierung » Deployment von Datenbanken und Anwendungen » Anforderungen für das Deployment von Clientanwendungen » Deployment von OLE DB- und ADO-Client » Anpassung des OLE DB-Providers

 

OLE DB-Provider anpassen

Erstellen Sie einen eindeutigen OLE DB-Provider, den Sie in das Deployment Ihrer Anwendung einbeziehen können, indem Sie eine eindeutige Gruppe von GUIDs erstellen, den Provider benennen und eindeutige DLL-Namen wählen.

Voraussetzungen

Es gibt keine Voraussetzungen für diese Aufgabe.

 Aufgabe
  1. Kopieren Sie den folgenden Code in einen Texteditor und speichern Sie ihn als .reg-Datei:



    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"

    Bei Namen von Registrierungswerten wird die Groß- und Kleinschreibung berücksichtigt.

  2. Verwenden Sie das Microsoft Visual Studio-Dienstprogramm uuidgen, um 4 sequenzielle UUIDs (GUIDs) zu erstellen.

    Führen Sie beispielsweise den folgenden Befehl an einer Eingabeaufforderung aus:

    uuidgen -n4 -s -x >oledbs.txt

    Die 4 UUIDs bzw. GUIDs werden in der folgenden Sequenz zugewiesen:

    1. Die Provider-Klassen-ID (unten GUID1)

    2. Die Enum-Klassen-ID (unten GUID2)

    3. Die ErrorLookup-Klassen-ID (unten GUID3)

    4. Die Provider Assist-Klassen-ID (unten GUID4). Diese letzte GUID wird in Windows Mobile-Deployments nicht verwendet.

    Es ist wichtig, dass die IDs sequenziell zugeordnet werden (was die Option -x in der Befehlszeile bewirkt).

    Jede GUID sollte ähnlich wie die folgende angezeigt werden:

    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
    Hinweis

    Der erste Teil der GUID (z.B. 41dfe9f3), der inkrementiert wird.

  3. Ändern Sie mit der Suchen/Ersetzen-Funktion eines Editors die Elemente GUID1, GUID2, GUID3 und GUID4 im Text in die entsprechende GUID. (Ersetzen Sie beispielsweise GUID1 durch 41dfe9f3-db92-11d2-8c43-006008d26a6f, wenn dies die GUID ist, die uuidgen für Sie generiert hat.)

  4. Wählen Sie den Providernamen, den Sie in Ihrer Anwendung in Verbindungszeichenfolgen usw. verwenden (z.B. Provider=SQLAny).

    Die folgenden Namen sind für SQL Anywhere reserviert und dürfen nicht als Providernamen verwendet werden:

    Version 10 oder höher Version 9 oder früher
    SAOLEDB ASAProv
    SAErrorLookup ASAErrorLookup
    SAEnum ASAEnum
    SAOLEDBA ASAProvA
  5. Ändern Sie mit der Suchen/Ersetzen-Funktion eines Editors alle Textstellen der Zeichenfolge "SQLAny" in den von Ihnen gewählten Providernamen. Dies umfasst auch alle Textstellen, bei denen "SQLAny" ein Teil einer längeren Zeichenfolge ist (z.B. SQLAnyEnum).

    Angenommen Sie wählen den Providernamen "Acme". Die Namen, die im Registrierungseintrag HKEY_CLASSES_ROOT angezeigt werden, sind in der folgenden Tabelle zusammen mit den SQL Anywhere-Namen (zum Vergleich) aufgelistet.

    SQL Anywhere-Provider Ihr benutzerdefinierter Provider
    SAOLEDB Acme
    SAErrorLookup AcmeErrorLookup
    SAEnum AcmeEnum
    SAOLEDBA AcmeA
  6. Erstellen Sie Kopien der SQL Anywhere-Provider-DLLs (dboledb16.dll und dboledba16.dll) unter anderen Namen.

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

    Die Datei dboledba16.dll gibt es nicht für Windows Mobile.

    Ein spezieller Registrierungsschlüssel durch das auf dem gewählten DLL-Namen basierende Skript erstellt. Der Name muss sich von den Namen der Standard-DLLs (z.B. dboledb16.dll oder dboledba16.dll) unterscheiden. Wenn Sie die Provider-DLL myoledb16 nennen, sucht der Provider in HKEY_CLASSES_ROOT einen Registrierungseintrag mit demselben Namen. Dies gilt auch für die Provider-Schema-Assist-DLL. Wenn Sie die DLL myoledba16 nennen, sucht der Provider in HKEY_CLASSES_ROOT einen Registrierungseintrag mit demselben Namen. Der gewählte Name muss eindeutig sein und darf von keinem anderen Benutzer verwendet werden. Hier einige Beispiele.

    Gewählte DLL-Namen Entsprechung 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. Ändern Sie mit der Suchen/Ersetzen-Funktion eines Editors alle Vorkommen der Zeichenfolgen myoledb16 und myoledba16 im Registrierungsskript in die beiden von Ihnen gewählten DLL-Namen.

  8. Ändern Sie mit der Suchen/Ersetzen-Funktion eines Editors alle Textstellen der Zeichenfolge d:\\mypath\\bin32\\ im Registrierungsskript in den Speicherort, an dem die DLLs installiert wurden. Verwenden Sie zwei Schrägstriche, wenn Sie einen einzelnen Schrägstrich angeben wollen. Dieser Schritt muss zum Zeitpunkt der Anwendungsinstallation ausgeführt werden.

  9. Speichern Sie das Registrierungsskript auf der Festplatte und führen Sie es aus.

  10. Probieren Sie den neuen Provider aus. Ändern Sie Ihre ADO/OLE DB-Anwendung so, dass sie den neuen Providernamen verwendet.

Ergebnisse

Ihr benutzerdefinierter OLE DB-Provider wurde konfiguriert.

Nächste Schritte

Führen Sie das Deployment des benutzerdefinierten OLE DB-Providers mit Ihrer Anwendung durch.