Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis |
|---|
Im Folgenden technischen Hinweis ist nicht aktualisiert wurde, seitdem er erstmals in der Onlinedokumentation enthalten waren.Folglich können mehrere Prozeduren und Themen veraltet oder falsch.Die aktuellsten Informationen wird empfohlen, zum Thema Onlinedokumentations im Index finden. |
Dieser Hinweis beschreibt Richtlinien für ODBC-Treiber-Writer.Er beschreibt allgemeine Anforderungen und Annahmen aus ODBC-Funktionalität, dass die MFC-Datenbankklassen ausführen, und von verschiedenen erwarteten semantischen Details.Die erforderliche Funktionalität zum Treiber geöffneten der drei Modi CRecordset (forwardOnly, und snapshot beschrieben werden dynaset) zu unterstützen.
Cursorbibliothek ODBC
Die MFC-Datenbankklassen bieten dem Benutzer Funktionalität dar, die in vielen Fällen die Funktionalität übertrifft, die von den meisten Level 1 ODBC-Treibern bereitgestellt wird.Glücklicherweise überlagert die Cursorbibliothek ODBC zwischen den Datenbankklassen und dem Treiber und stellt automatisch viele dieser zusätzlichen Funktionen.
Zum Beispiel unterstützt die meisten 1.0 Treiber Rückwärtsscrollen nicht.Die Cursorbibliothek kann dieses erkennen, und Zeilen aus dem Treiber zwischenspeichern und darstellt, z. B. auf FETCH_PREV-Aufrufen in SQLExtendedFetch angefordert.
Ein anderes wichtiges Beispiel für die Cursorbibliotheks positionierbare Aktualisierungen abhängigkeit ist.Die meisten 1.0 Treiber positionierbare Aktualisierungen nicht haben, aber die Cursorbibliothek generierten Update-Anweisungen, die eine Zeile Ziel in der Datenquelle identifizieren, die nach den aktuellen zwischengespeicherten Datenwerten basiert wird, oder einen zwischengespeicherten Timestampwert.
Die Klassenbibliothek werden nie mehrere Rowsets aus.Daher werden die am wenigsten SQLSetPos-Anweisungen immer auf Zeile 1 des Rowsets angewendet.
CDatabases
Jedes CDatabase ordnet einzelnes HDBC.(Wenn die ExecuteSQL-Funktion der CDatabase verwendet wird, ist vorübergehend HSTMT zugeordnet.) Wenn also mehrere CDatabases erforderlich sind, müssen mehrere HDBCs pro HENV unterstützt werden.
Die Datenbankklassen benötigen die Cursorbibliothek.Dies wird in einem SQLSetConnections Aufruf SQL_ODBC_CURSORS, SQL_CUR_USE_ODBC wiedergegeben.
SQLDriverConnect, SQL_DRIVER_COMPLETE wird von CDatabase::Open verwendet, um die Verbindung mit der Datenquelle herzustellen.
Der Treiber muss >= SQL_OAC_LEVEL1, >= SQL_OSC_MINIMUM unterstützen SQLGetInfoSQL_ODBC_API_CONFORMANCESQLGetInfoSQL_ODBC_SQL_CONFORMANCE.
Um Transaktionen für CDatabase und ihre abhängigen Recordsets unterstützt werden können, müssen SQLGetInfoSQL_CURSOR_COMMIT_BEHAVIOR und SQL_CURSOR_ROLLBACK_BEHAVIORSQL_CR_PRESERVE haben.Andernfalls werden die Transaktionen Versucht, die Ausführung ignoriert.
SQLGetInfoSQL_DATA_SOURCE_READ_ONLY muss unterstützt werden.Wenn "Y" zurückgibt, werden keine Aktualisierungsvorgänge in der Datenquelle ausgeführt.
Beim Öffnen CDatabase schreibgeschützt ist, wird versucht, die schreibgeschützte Datenquelle mit SQLSetConnectOption Festlegen SQL_ACCESS_MODE, SQL_MODE_READ_ONLY gemacht.
Wenn der Bezeichner Veranschlagung benötigen, sollten diese Informationen vom Treiber mit einem Aufruf SQLGetInfoSQL_IDENTIFIER_QUOTE_CHAR zurückgegeben werden.
Für Debugzwecke werden SQLGetInfo SQL_DBMS_VER und SQL_DBMS_NAME vom Treiber abgerufen.
SQLSetStmtOptionSQL_QUERY_TIMEOUT und SQL_ASYNC_ENABLE werden möglicherweise für das HDBC einer CDatabase aufgerufen.
SQLError wird mit allen aufgerufen werden, oder alle Argumente zur ungültig.
Natürlich müssen SQLAllocEnv, SQLAllocConnect, SQLDisconnect und SQLFreeConnect unterstützt werden.
ExecuteSQL
Zusätzlich zum Zuordnen und zum Freigeben von temporären HSTMT, ruft ExecuteSQLSQLExecDirect, SQLFetch, SQLNumResultCol und SQLMoreResults an.SQLCancel wird um HSTMT aufgerufen werden.
GetDatabaseName
SQLGetInfoSQL_DATABASE_NAME aufgerufen wird.
BeginTrans, CommitTrans und Rollback
SQLSetConnectOptionSQL_AUTOCOMMIT und SQLTransactSQL_COMMIT, SQL_ROLLBACK und SQL_AUTOCOMMIT werden aufgerufen, wenn Anforderungen transaktional.
CRecordsets
SQLAllocStmt, SQLPrepare, SQLExecute (für Öffnen und Requery), SQLExecDirect (bei Aktualisierungsvorgängen), SQLFreeStmt muss unterstützt werden.Um SQLNumResultCols und SQLDescribeCol werden zu unterschiedlichen Zeiten das Resultset aufgerufen.
SQLSetParam wird extensiv Bindungsparameter für Daten und DATA_AT_EXEC-Funktionen verwendet.
SQLBindCol wird extensiv verwendet, um Speicherorte datenspeicherungs Ausgabespalten mit ODBC zu registrieren.
Zwei SQLGetData Aufrufe werden verwendet, um SQL_LONG_VARCHAR und SQL_LONG_VARBINARY Daten abzurufen.Die Versuche des ersten Rufs, die Gesamtlänge des Spaltenwerts durch Aufrufen von SQLGetData mit cbMaxValue 0, jedoch mit einem gültigen pcbValue zu suchen.Wenn pcbValue SQL_NO_TOTAL enthält, wird eine Ausnahme ausgelöst.Andernfalls wird HGLOBAL zugeordnet, und ein anderer SQLGetData Aufruf, um das Gesamtergebnis abzurufen.
Aktualisieren
Wenn vollständig Sperren angefordert wird, wird SQLGetInfoSQL_LOCK_TYPES abgefragt.Wenn SQL_LCK_EXCLUSIVE nicht unterstützt wird, wird eine Ausnahme ausgelöst.
Versucht, CRecordset zu aktualisieren oder dynaset) (snapshot bewirken eine Sekunde HSTMT zugeordnet werden soll.Für Treiber, die HSTMT zweites nicht unterstützen, simuliert die Cursorbibliothek diese Funktionalität bereit.Leider bedeutet dies möglicherweise gelegentlich das Erzwingen der aktuellen Abfrage auf ersten HSTMT bis zum Abschluss, bevor die zweite Anforderung des HSTMTS verarbeitet.
SQLFreeStmtSQL_CLOSE und SQL_RESET_PARAMS werden während SQLGetCursorName und Aktualisierungsvorgängen aufgerufen.
Wenn es CLongBinarys in outputColumns vorhanden ist, muss DATA_AT_EXEC-Funktionalität ODBC unterstützt werden.Dies schließt das Zurückgeben einer SQL_NEED_DATA von SQLExecDirect, SQLParamData und SQLPutData ein.
SQLRowCount wird aufgerufen, nachdem der Ausführung sicherzustellen, dass nur 1 Datensatz durch SQLExecDirect aktualisiert wurde.
ForwardOnly-Cursor
Nur SQLFetch ist für die Verschieben Vorgänge erforderlich.Beachten Sie, dass forwardOnly Cursor keine Aktualisierungen unterstützen.
Momentaufnahme-Cursor
Momentaufnahme erforderlich SQLExtendedFetch-Funktionen unterstützt.Wie oben erwähnt, erkennt der ODBC-Cursorbibliothek, wenn ein Treiber nicht unterstützt, SQLExtendedFetch und stellt die erforderliche Unterstützung selbst.
SQLGetInfo, SQL_SCROLL_OPTIONS muss SQL_SO_STATIC unterstützen.
Dynaset-Cursor
Im Folgenden wird die minimale Unterstützung, die ein Dynaset geöffnet erforderlich ist:
SQLGetInfo, SQL_ODBC_VER muss > "01 " zurück.
SQLGetInfo, SQL_SCROLL_OPTIONS muss SQL_SO_KEYSET_DRIVEN unterstützen.
SQLGetInfo, SQL_ROW_UPDATES muss "Y" zurückgeben.
SQLGetInfo, SQL_POSITIONED_UPDATES muss SQL_PS_POSITIONED_DELETE und SQL_PS_POSITIONED_UPDATE unterstützen.
Wenn vollständig Sperren angefordert wird, wird ein Aufruf SQLSetPos mit irow 1 und FALSE fRefresh Menge SQL_LCK_EXCLUSIVE gemacht.
Hinweis