TN042: ODBC Driver vývojáři doporučení
[!POZNÁMKA]
Následující technické poznámce nebyly aktualizovány od byla poprvé zahrnuta v dokumentaci online.Proto některé postupy a témata mohou být nesprávné nebo zastaralé.Nejnovější informace je vhodné vyhledat téma zájmu v dokumentaci online index.
Tato poznámka popisuje pokyny pro autory ovladač ODBC.Ji popisuje obecné požadavky a předpoklady funkce ODBC, aby třídami databází MFC a různé očekávané sémantické podrobnosti.Požadovaná funkce ovladače podporují tři CRecordset otevřete režimy (forwardOnly, snímek a dynaset) jsou popsány.
Knihovna kurzorů ODBC's
Třídami databází MFC předložit funkce pro uživatele, který je v mnoha případech překročí funkce poskytované Většina ovladačů ODBC úrovně 1.Naštěstí Knihovna kurzorů ODBC v samotné vrstvy mezi třídami databází a ovladač a automaticky většinu této další funkce.
Například většina 1.0 ovladače nepodporují posouvání dozadu.Knihovna kurzorů můžete zjistit a budou řádky z ovladače do mezipaměti a předkládat je podle požadavku na volání FETCH_PREV v SQLExtendedFetch.
Jiné důležité závislost knihovny kurzoru je umístěny aktualizace.Většina ovladačů 1.0 také nemají umístěny aktualizace, ale Knihovna kurzorů bude generovat výkazy aktualizace, které identifikují cílový řádek na zdroji dat na základě aktuální hodnoty data uložená v mezipaměti nebo hodnotu časového razítka v mezipaměti.
Knihovna tříd nikdy využívá více sad řádků.Proto několik SQLSetPos příkazy jsou vždy použity řádek 1 řádků.
CDatabases
Každý CDatabase přiděluje jediné HDBC.(Pokud CDatabasena ExecuteSQL je použita funkce HSTMT dočasně přidělených.) Ano, pokud více CDatabase's vyžadováno, více HDBCza s popisovače vlastnosti HENV musí být podporována.
Databáze tříd vyžadují Knihovna kurzorů.To se odráží v SQLSetConnections volání SQL_ODBC_CURSORS, SQL_CUR_USE_ODBC.
SQLDriverConnect, SQL_DRIVER_COMPLETE používá CDatabase::Open připojení ke zdroji dat.
Ovladač musí podporovat SQLGetInfoSQL_ODBC_API_CONFORMANCE > = SQL_OAC_LEVEL1, SQLGetInfoSQL_ODBC_SQL_CONFORMANCE > = SQL_OSC_MINIMUM.
Podporované pro transakce, aby CDatabase a závislé sady záznamů, SQLGetInfoSQL_CURSOR_COMMIT_BEHAVIOR a SQL_CURSOR_ROLLBACK_BEHAVIOR musí mít SQL_CR_PRESERVE.Pokusy o provedení transakce řízení jinak, budou ignorovány.
SQLGetInfoSQL_DATA_SOURCE_READ_ONLY musí být podporována.Vrátí hodnotu "Y", žádné operace aktualizace proběhne na zdroji dat.
Pokud CDatabase je otevřen jen pro čtení, nastavení zdroje dat číst pouze pokusí s SQLSetConnectOptionSQL_ACCESS_MODE, SQL_MODE_READ_ONLY.
Pokud identifikátory citací, tato informace by měla být vrácena z ovladače s SQLGetInfoSQL_IDENTIFIER_QUOTE_CHAR volání.
Pro účely ladění SQLGetInfo SQL_DBMS_VER a SQL_DBMS_NAME jsou načteny z ovladače.
SQLSetStmtOptionSQL_QUERY_TIMEOUT a SQL_ASYNC_ENABLE může být vyvolána na CDatabasena HDBC.
Funkce SQLError může být volána s některé nebo všechny argumenty hodnotu NULL.
Samozřejmě SQLAllocEnv, SQLAllocConnect, SQLDisconnect a SQLFreeConnect musí být podporována.
ExecuteSQL
K přidělení a uvolnění dočasnou HSTMT, ExecuteSQL volání funkce SQLExecDirect, Funkce SQLFetch, SQLNumResultCol a SQLMoreResults.SQLCancel může být vyvolána na HSTMT.
GetDatabaseName
SQLGetInfoSQL_DATABASE_NAME bude volána.
Vrácení zpět do příkazů BeginTrans, CommitTrans,
SQLSetConnectOptionSQL_AUTOCOMMIT a SQLTransactSQL_COMMIT, SQL_ROLLBACK a SQL_AUTOCOMMIT bude volán, pokud transakce žádostech.
CRecordsets
SQLAllocStmt, funkce SQLPrepare, SQLExecute (pro otevřených a Requery), funkce SQLExecDirect (pro operace aktualizace), SQLFreeStmt musí být podporována.SQLNumResultCols a Funkce SQLDescribeCol se nazývá výsledky nastavit v různých časech.
SQLSetParam je často používány pro vázání dat parametru a DATA_AT_EXEC funkce.
SQLBindCol je často používány k registraci výstupní sloupce umístění úložiště dat ODBC.
Dva Funkce SQLGetData volání slouží k načtení SQL_LONG_VARCHAR a SQL_LONG_VARBINARY data.První volání pokusí najít celková délka hodnota sloupce voláním Funkce SQLGetData s cbMaxValue 0, ale s platnou pcbValue.Pokud obsahuje pcbValue SQL_NO_TOTAL, je vyvolána výjimka.Jinak HGLOBAL je přidělena a jiné Funkce SQLGetData načíst celý výsledek volání.
Aktualizování
Pokud je požadováno pesimistické zamykání, SQLGetInfoSQL_LOCK_TYPES budou dotazovány.Pokud SQL_LCK_EXCLUSIVE nejsou podporovány, bude vyvolána výjimka.
Pokusí aktualizovat CRecordset (snímek nebo dynaset) způsobí, že druhý HSTMT má být přidělen.Ovladače, které nepodporují druhé HSTMT, bude Knihovna kurzorů simulovat tuto funkci.Bohužel to může někdy znamenat vynucení aktuální dotaz na první HSTMT k dokončení před zpracováním druhé HSTMTtohoto požadavku.
SQLFreeStmtSQL_CLOSE a SQL_RESET_PARAMS a SQLGetCursorName bude volána během operace aktualizace.
Pokud jsou CLongBinarys v outputColumns, ODBC a DATA_AT_EXEC funkce musí být podporována.To zahrnuje vrácení SQL_NEED_DATA z funkce SQLExecDirect, SQLParamData a SQLPutData.
Tato funkce je volána po provedení ověření aktualizoval pouze jeden záznam funkce SQLExecDirect.
ForwardOnly kurzory
Pouze Funkce SQLFetch je nutné přesunout operací.Všimněte si, že forwardOnly kurzory nepodporují aktualizace.
Snímek kurzory
Snímek funkce vyžaduje SQLExtendedFetch podporu.Jak bylo uvedeno výše, bude Knihovna kurzorů ODBC rozpoznat, kdy ovladač nepodporuje SQLExtendedFetcha poskytnout nezbytnou podporu sám.
SQLGetInfo, SQL_SCROLL_OPTIONS musí podporovat SQL_SO_STATIC.
Dynamická kurzory
Dále je minimální podpora nutná k otevření je dynamická:
SQLGetInfo, SQL_ODBC_VER musí vrátit > "01".
SQLGetInfo, SQL_SCROLL_OPTIONS musí podporovat SQL_SO_KEYSET_DRIVEN.
SQLGetInfo, SQL_ROW_UPDATES musí vrátit "Y".
SQLGetInfo, SQL_POSITIONED_UPDATES musí podporovat SQL_PS_POSITIONED_DELETE a SQL_PS_POSITIONED_UPDATE.
Kromě toho, pokud je požadováno pesimistické zamykání volání SQLSetPos irow 1, fRefresh FALSE a hejno SQL_LCK_EXCLUSIVE budou provedeny.