Diese Applikationsschrift beschreibt Richtlinien für ODBC-Treiber-Autoren. Es werden allgemeine Anforderungen und Annahmen der ODBC-Funktionalität, die die MFC-Datenbankklassen zu machen, und verschiedene erwarteten semantische Informationen. Erforderlichen Treiber Funktionalität zur Unterstützung der drei CRecordset Open-Modi (ForwardOnlyund Dynasetund Snapshot ) werden beschrieben.
Die ODBC-Cursorbibliothek
Die MFC-Datenbankklassen stellen Funktionalität für den Benutzer, der in vielen Fällen die von den meisten Stufe 1-ODBC-Treiber bereitgestellte Funktionalität übertrifft. Glücklicherweise wird die ODBC-Cursorbibliothek wird Schicht selbst zwischen den Datenbankklassen und den Treiber, und automatisch viel dieser zusätzlichen Funktionalität.
Zum Beispiel, unterstützt die meisten 1.0 Treiber nicht rückwärts scrollen. Die Cursor-Bibliothek können erkennen, Zeilen aus der Treiber zwischengespeichert und präsentieren ihnen schnellstens auf FETCH_PREV aufrufen in SQLExtendedFetch.
Ein weiteres wichtiges Beispiel für Cursor-Bibliothek Abhängigkeit ist positionierte Aktualisierungen. Die meisten 1.0 Treiber haben auch nicht positionierte Aktualisierungen, aber die Cursorbibliothek generiert Update-Anweisungen, die eine bestimmten Zeile in der Datenquelle basierend auf den aktuellen zwischengespeicherten Datenwerte oder einen zwischengespeicherten Timestamp-Wert ermitteln.
Die Bibliothek-Klasse nie nutzt mehrere Rowsets. Daher sind die paar SQLSetPos Erklärungen immer auf 1 Zeile des Rowsets angewendet.
CDatabases
Jede CDatabase ordnet ein einzelnes HDBC. (Wenn CDatabase ExecuteSQL -Funktion verwendet wird, ist vorübergehend ein HSTMT belegt.) Also wenn mehrere CDatabaseerforderlich sind, muss mehrere HDBCs pro HENV unterstützt werden.
Die Datenbankklassen erfordern die Cursor-Bibliothek. Dies spiegelt sich in einem SQLSetConnections Aufruf SQL_ODBC_CURSORS, SQL_CUR_USE_ODBC.
SQLDriverConnect, SQL_DRIVER_COMPLETE wird von CDatabase:: Open zum Herstellen der Verbindung mit der Datenquelle verwendet.
Der Treiber muss unterstützen SQLGetInfo SQL_ODBC_API_CONFORMANCE Gt; = SQL_OAC_LEVEL1, SQLGetInfo SQL_ODBC_SQL_CONFORMANCE > = SQL_OSC_MINIMUM.
In Reihenfolge für Transaktionen für die CDatabase und seine abhängigen Recordsets unterstützt werden müssen die SQLGetInfo-SQL_CURSOR_COMMIT_BEHAVIOR und SQL_CURSOR_ROLLBACK_BEHAVIOR SQL_CR_PRESERVE. Andernfalls werden Versuche, Transaktionssteuerung auszuführen ignoriert .
SQLGetInfo SQL_DATA_SOURCE_READ_ONLY muss unterstützt werden. Wenn sie "Y" zurückgibt, werden keine Update-Operationen in der Datenquelle ausgeführt werden.
Wenn die CDatabase geöffnet ist ReadOnly Versuch, die Daten Quelle Readonly festgelegt mit SQLSetConnectOptionSQL_ACCESS_MODE, SQL_MODE_READ_ONLY erfolgt .
Benötigen Bezeichner zitiert, sollten diese Informationen von den Treiber mit einem SQLGetInfo-SQL_IDENTIFIER_QUOTE_CHAR -Aufruf 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 kann auf ein CDatabase HDBC aufgerufen werden .
SQLError kann einige oder alle Argumente NULL aufgerufen werden.
Natürlich, müssen SQLAllocEnv, SQLAllocConnect, SQLDisconnect und SQLFreeConnect unterstützt werden.
ExecuteSQL
Bei zusätzlich zu reservieren und Freigeben von ein temporäre HSTMT, ExecuteSQL SQLExecDirect, SQLFetch, SQLNumResultCol und fordert SQLMoreResults. Für die HSTMT kann SQLCancel aufgerufen werden.
GetDatabaseName
SQLGetInfo SQL_DATABASE_NAME wird aufgerufen.
BeginTrans, CommitTrans, Rollback
SQLSetConnectOption SQL_AUTOCOMMIT und SQLTransact SQL_COMMIT SQL_ROLLBACK und SQL_AUTOCOMMIT wird aufgerufen, wenn Transaktion Anforderungen gestellt werden.
CRecordsets
SQLAllocStmt SQLPrepare, SQLExecute (für offene und Requery), SQLExecDirect (für Update-Vorgänge), SQLFreeStmt muss unterstützt werden. SQLNumResultCols und SQLDescribeCol wird auf die Ergebnisse zu verschiedenen Zeiten aufgerufen werden.
SQLSetParam wird weitgehend benutzt für das Binden der Parameterdaten und DATA_AT_EXEC Funktionalität.
SQLBindCol wird extensiv registrieren Ausgabe Spalte Datenspeicherorte mit ODBC.
Zwei Aufrufe von SQLGetData verwendet, um SQL_LONG_VARCHAR und SQL_LONG_VARBINARY Daten abzurufen. Der erste Aufruf versucht, die gesamte Länge des Spaltenwerts finden durch Aufrufen von SQLGetData , mit CbMaxValue von 0, aber mit einem gültigen PcbValue. Wenn PcbValue SQL_NO_TOTALenthält, wird eine Ausnahme ausgelöst. Andernfalls ein HGLOBAL zugeordnet ist, und eine andere SQLGetData aufgerufen um das gesamte Resultset abzurufen.
Aktualisieren
Wenn pessimistische sperren angefordert wird, wird die SQLGetInfo SQL_LOCK_TYPES abgefragt werden. Wenn SQL_LCK_EXCLUSIVE nicht unterstützt wird, wird eine Ausnahme ausgelöst werden.
Versuche, ein CRecordset (Snapshot oder Dynaset) zu aktualisieren bewirkt, dass eine zweite HSTMT zugeteilt werden. Für Fahrer, die zweite HSTMTnicht unterstützen, wird die Cursor-Bibliothek diese Funktionalität zu simulieren. Leider kann dies manchmal bedeuten Erzwingen der aktuellen Abfrage auf der ersten HSTMT zum Abschluss vor der Verarbeitung der zweite HSTMT-Anforderung.
SQLFreeStmt SQL_CLOSE und SQL_RESET_PARAMS und SQLGetCursorName wird während der Update-Operationen aufgerufen werden.
Wenn CLongBinarys in der OutputColumnsvorhanden sind, muss der ODBC- DATA_AT_EXEC -Funktionalität unterstützt werden. Dies schließt Rückkehr SQL_NEED_DATA aus SQLExecDirect, SQLParamData und SQLPutData.
SQLRowCount ist nach der Ausführung zu überprüfen, ob nur 1 Datensatz, indem die SQLExecDirect aktualisiert wurde aufgerufen.
ForwardOnly Cursor
Nur SQLFetch ist für die Verschieben -Vorgänge erforderlich. Beachten Sie, dass ForwardOnly Cursor Aktualisierungen nicht unterstützen.
Snapshotcursor
Snapshot-Funktion erfordert SQLExtendedFetch Unterstützung. Wie bereits erwähnt, wird die ODBC-Cursorbibliothek erkennen, wenn ein Treiber nicht SQLExtendedFetch unterstützt, und die notwendige Unterstützung selbst bieten.
SQLGetInfo, SQL_SCROLL_OPTIONS muss SQL_SO_STATIC unterstützen.
Dynaset Cursor
Unten ist die minimale Unterstützung erforderlich, um ein Dynaset-Recordset öffnen:
SQL&GetInfo, muss SQL_ODBC_VER Gt zurückgeben; "01".
SQLGetInfo, SQL_SCROLL_OPTIONS muss SQL_SO_KEYSET_DRIVEN unterstützen.
SQLGetInfo, muss SQL_ROW_UPDATES zurückgeben "Y".
SQLGetInfo, muss SQL_POSITIONED_UPDATES SQL_PS_POSITIONED_DELETE und SQL_PS_POSITIONED_UPDATE unterstützen.
Zusätzlich, wenn pessimistische sperren angefordert wird, wird ein Aufruf von SQLSetPos mit Irow 1, fRefresh FALSE und Herde SQL_LCK_EXCLUSIVE gemacht.
Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie