Herstellen einer Verbindung mit einer Datenquelle (ODBC)
Nach dem Zuweisen der Umgebungs- und Verbindungshandles und dem Festlegen der Verbindungsattribute stellt die Anwendung eine Verbindung zur Datenquelle oder zum Treiber her. Es gibt drei Funktionen, die Sie verwenden können, um eine Verbindung herzustellen:
SQLConnect
SQLDriverConnect
SQLBrowseConnect
Weitere Informationen darüber, wie SieVerbindungen zu einer Datenquelle herstellen (etwa zu den verfügbaren Zeichenfolgenoptionen), finden Sie unter Verwenden von Schlüsselwörtern für Verbindungszeichenfolgen mit SQL Server Native Client.
SQLConnect
SQLConnect ist die einfachste Verbindungsfunktion. Sie akzeptiert drei Parameter: Datenquellenname, Benutzer-ID und Kennwort. Verwenden Sie SQLConnect, wenn diese drei Parameter sämtliche Informationen enthalten, die zum Herstellen einer Verbindung mit der Datenbank erforderlich sind. Erstellen Sie dazu mithilfe von SQLDataSources eine Liste der Datenquellen; fordern Sie den Benutzer auf, Datenquelle, Benutzer-ID und Kennwort anzugeben; und rufen Sie dann SQLConnect auf.
SQLConnect geht davon aus, dass Datenquellenname, Benutzer-ID und Kennwort ausreichend sind, um eine Verbindung zu einer Datenquelle herzustellen, und dass die ODBC-Datenquelle sämtliche anderen Informationen enthält, die der ODBC-Treiber zum Herstellen der Verbindung benötigt. Im Gegensatz zu SQLDriverConnect und SQLBrowseConnect verwendet SQLConnect keine Verbindungszeichenfolge.
SQLDriverConnect
SQLDriverConnect wird verwendet, wenn über Datenquellenname, Benutzer-ID und Kennwort hinaus weitere Informationen erforderlich sind. Einer der Parameter zu SQLDriverConnect ist eine Verbindungszeichenfolge, die treiberspezifische Informationen enthält. Die Verwendung von SQLDriverConnect anstelle von SQLConnect ist in den folgenden Fällen sinnvoll:
Um zum Zeitpunkt des Verbindungsaufbaus treiberspezifische Informationen anzugeben.
Um anzugeben, dass der Treiber den Benutzer zur Eingabe von Verbindungsinformationen auffordert.
Um eine Verbindung herzustellen, ohne eine ODBC-Datenquelle zu verwenden.
Die Verbindungszeichenfolge SQLDriverConnect enthält mehrere Paare aus Schlüsselwörtern und Werten, die sämtliche von einem ODBC-Treiber unterstützten Verbindungsinformationen angeben. Bei allen vom Treiber unterstützten Verbindungsinformationen unterstützt jeder Treiber über die treiberspezifischen Schlüsselwörter hinaus die standardmäßigen ODBC-Schlüsselwörter (DSN, FILEDSN, DRIVER, UID, PWD und SAVEFILE). SQLDriverConnect kann verwendet werden, um ohne Datenquelle eine Verbindung herzustellen. Beispielsweise kann eine Anwendung, die eine DSN-lose Verbindung zu einer Instanz von SQL Server herstellen soll, mithilfe einer Verbindungszeichenfolge (mit Anmelde-ID, Kennwort, Netzwerkbibliothek, Servername, zu dem eine Verbindung hergestellt werden soll, sowie der zu verwendenden Standarddatenbank) SQLDriverConnect aufrufen.
Bei der Verwendung von SQLDriverConnect gibt es zwei Optionen, um den Benutzer zur Eingabe der benötigten Verbindungsinformationen aufzufordern:
Dialogfeld "Anwendung"
Sie können ein Anwendungsdialogfeld erstellen, das zur Eingabe der Verbindungsinformationen auffordert und anschließend SQLDriverConnect mit einem Fensterhandle von NULL und einem DriverCompletion-Parameter von SQL_DRIVER_NOPROMPT aufruft. Diese Parametereinstellungen verhindern, dass der ODBC-Treiber ein eigenes Dialogfeld öffnet. Diese Methode wird verwendet, wenn die Benutzeroberfläche der Anwendung gesteuert werden muss.
Dialogfeld "Filter"
Sie können festlegen, dass die Anwendung ein gültiges Fensterhandle an SQLDriverConnect weitergibt und den DriverCompletion-Parameter auf SQL_DRIVER_COMPLETE, SQL_DRIVER_PROMPT oder SQL_DRIVER_COMPLETE_REQUIRED setzt. Der Treiber generiert dann ein Dialogfeld, um den Benutzer zur Eingabe von Verbindungsinformationen aufzufordern. Diese Methode vereinfacht den Anwendungscode.
SQLBrowseConnect
Ebenso wie SQLDriverConnect verwendet SQLBrowseConnect eine Verbindungszeichenfolge. Mithilfe von SQLBrowseConnect kann eine Anwendung jedoch wiederholt eine vollständige Verbindungszeichenfolge mit der Datenquelle zur Laufzeit erstellen. Dadurch kann die Anwendung zwei Funktionen erfüllen:
Erstellen eigener Dialogfelder, um zur Eingabe dieser Informationen aufzufordern, wodurch die Kontrolle über die Benutzeroberfläche beibehalten wird.
Durchsuchen des Systems nach Datenquellen, die von einem bestimmten Treiber verwendet werden können. Dies sollte nach Möglichkeit in mehreren Schritten erfolgen.
Beispielsweise kann der Benutzer zunächst das Netzwerk nach Servern durchsuchen und, sobald er einen Server ausgewählt hat, diesen nach Datenbanken durchsuchen, auf die der Treiber zugreifen kann.
Sobald SQLBrowseConnect erfolgreich eine Verbindung hergestellt hat, wird eine Verbindungszeichenfolge zurückgegeben, die bei nachfolgenden Aufrufen von SQLDriverConnect verwendet werden kann.
Der SQL Server-Native Client-ODBC-Treiber gibt im Anschluss an einen erfolgreichen SQLConnect, SQLDriverConnect oder SQLBrowseConnect stets SQL_SUCCESS_WITH_INFO zurück. Wenn eine ODBC-Anwendung nach dem Erhalt von SQL_SUCCESS_WITH_INFO den Parameter SQLGetDiagRec aufruft, sind folgende Meldungen möglich:
5701
Gibt an, dass SQL Server den Kontext des Benutzers in die in der Datenquelle angegebene Standarddatenbank oder, wenn für die Datenquelle keine Standarddatenbank angegeben ist, in die Standarddatenbank der zur Verbindung verwendeten Anmelde-ID einfügt.5703
Gibt die auf dem Server verwendete Sprache an.
Bei einer erfolgreichen Verbindung wird die folgende Meldung vom Systemadministrator zurückgegeben:
szSqlState = "01000", *pfNativeError = 5701,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Changed database context to 'pubs'."
szSqlState = "01000", *pfNativeError = 5703,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Changed language setting to 'us_english'."
Sie können die Meldungen 5701 und 5703 ignorieren; sie dienen nur zu Informationszwecken. Den Rückgabecode SQL_SUCCESS_WITH_INFO hingegen sollten Sie nicht ignorieren, da auch andere Meldungen als 5701 oder 5703 zurückgegeben werden können. Wenn beispielsweise ein Treiber eine Verbindung zu einem Server herstellt, auf dem eine SQL Server-Instanz mit veralteten gespeicherten Prozeduren für Kataloginformationen ausgeführt wird, lautet eine der nach erfolgreichem SQL_SUCCESS_WITH_INFO von SQLGetDiagRec zurückgegebenen Fehlermeldungen:
SqlState: 01000
pfNative: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC
catalog stored procedures installed on server
my65server are version 06.50.0193; version 07.00.0205
or later is required to ensure proper operation.
Please contact your system administrator."
Die Fehlerbehandlungsfunktion einer Anwendung für SQL Server-Verbindungen sollte SQLGetDiagRec aufrufen, bis SQL_NO_DATA zurückgegeben wird. Anschließend sollte die Funktion bei allen Meldungen mit Ausnahme solcher, deren pfNative-Code 5701 oder 5703 lautet, tätig werden.
Überprüfen des Verbindungsstatus
Bei SQL Server 2000 und höher unterscheidet sich das Verhalten von SQL_ATTR_CONNECTION_DEAD und SQL_COPT_SS_CONNECTION_DEAD von demjenigen früherer Versionen. Bei SQL Server 2000 und höher gibt SQL_ATTR_CONNECTION_DEAD den jüngsten Verbindungsstatus zurück, was nicht zwangsläufig dem aktuellen Verbindungsstatus entspricht. SQL_COPT_SS_CONNECTION_DEAD hingegen ruft stets den aktuellen Verbindungsstatus aus der Netzwerkbibliothek ab.
Um diese Verhaltensweisen voneinander abzugrenzen, erhält SQL_COPT_SS_CONNECTION_DEAD in den Dateien von SQL Server 2000 und höher einen neuen Wert. Anwendungen, die dieses Attribut verwenden und mithilfe der Header von SQL Server 2000 und höher erstellt wurden, geben einen Fehler zurück (HY092, Ungültiger Attribut-/Optionsbezeichner), wenn die Anwendungen mit einem Treiber der Version SQL Server 7.0 ausgeführt werden. Es wird empfohlen, dass die Anwendung vor dem Aufrufen von SQLGetConnectAttr die Version des verwendeten Treibers überprüft und anschließend anstelle von SQL_COPT_SS_CONNECTION_DEAD den Parameter SQL_ATTR_CONNECTION_DEAD verwendet, wenn die Anwendung auf einem Treiber der Version SQL Server 7.0 ausgeführt wird.