TN042:ODBC 驅動程式開發人員建議
注意事項 |
---|
下列技術提示自其納入線上文件以來,未曾更新。因此,有些程序和主題可能已過期或不正確。如需最新資訊,建議您在線上文件索引中搜尋相關的主題。 |
這個附註描述 ODBC 驅動程式寫入器的方針。 大綱功能 MFC ODBC 資料庫類別進行各種專案語意詳細資料的一般需求和做法。 支援三個 CRecordset 開啟模式所需的驅動程式功能 (forwardOnly和 snapshot 和 dynaset) 中所述。
ODBC 資料指標程式庫
MFC 資料庫類別目前功能分類給在許多情況下多大部分層級 1 ODBC 驅動程式提供的功能的使用者。 所幸, ODBC 資料指標程式庫將分層自己在資料庫類別和驅動程式之間和自動提供這個額外的功能。
例如,大部分 1.0 驅動程式不支援向後捲動。 資料指標程式庫在 FETCH_PREV 呼叫 SQLExtendedFetch可能偵測到和快取從驅動程式的資料列並顯示它們按照需求。
資料指標程式庫相依性的另一個重要範例是定位更新。 大部分 1.0 驅動程式可能未將更新,不過,資料指標程式庫會產生識別資料來源的目標資料列會根據其目前快取的資料值的更新陳述式,或快取的時間戳記值。
類別庫從未使用多個資料列集。 因此,幾個 SQLSetPos 陳述式一律套用資料列 1 資料列集。
CDatabases
每個 CDatabase 指派唯一 HDBC。(如果使用 CDatabaseExecuteSQL 函式,暫時配置 HSTMT )。因此,如果需要多 entity_CODECDatabase 的,必須支援多個 HDBC的每個 HENV 。
資料庫類別要求資料指標程式庫。 這在 SQLSetConnections 呼叫 SQL_ODBC_CURSORS, SQL_CUR_USE_ODBC反映。
CDatabase::Open 用來SQLDriverConnectSQL_DRIVER_COMPLETE ,建立與資料來源的連接。
驅動程式必須支援 SQLGetInfo SQL_ODBC_API_CONFORMANCE >= SQL_OAC_LEVEL1, SQLGetInfo SQL_ODBC_SQL_CONFORMANCE >= SQL_OSC_MINIMUM。
為 CDatabase 和其相依的資料錄集要支援的交易, SQLGetInfo SQL_CURSOR_COMMIT_BEHAVIOR 和 SQL_CURSOR_ROLLBACK_BEHAVIOR 都必須有 SQL_CR_PRESERVE。 否則,嘗試執行交易控制將被忽略。
必須支援SQLGetInfoSQL_DATA_SOURCE_READ_ONLY 。 如果它傳回「Y」,更新作業在資料來源不會執行。
如果 CDatabase 開啟的唯讀,嘗試設定唯讀資料來源以 SQLSetConnectOption SQL_ACCESS_MODE, SQL_MODE_READ_ONLY會做出。
如果識別項需要使用引號,應該從具有 SQLGetInfo SQL_IDENTIFIER_QUOTE_CHAR 呼叫的驅動程式傳回這項資訊。
進行偵錯, SQLGetInfo SQL_DBMS_VER 和 SQL_DBMS_NAME 從驅動程式擷取。
SQLSetStmtOption SQL_QUERY_TIMEOUT 和 SQL_ASYNC_ENABLE 可能呼叫 CDatabaseHDBC。
SQLError 可能呼叫與任一或所有的引數為 null。
當然,必須支援 SQLAllocEnv和 SQLAllocConnect和 SQLDisconnect 和 SQLFreeConnect 。
ExecuteSQL
除了配置和釋放暫存 HSTMT之外, ExecuteSQL 呼叫 SQLExecDirect、、 SQLNumResultCol 和 SQLFetchSQLMoreResults。 SQLCancel 可能呼叫 HSTMT。
GetDatabaseName
SQLGetInfo SQL_DATABASE_NAME 會呼叫。
BeginTrans,以及,復原
如果交易產生要求,SQLSetConnectOption SQL_AUTOCOMMIT 和 SQLTransact SQL_COMMIT, SQL_ROLLBACK 和 SQL_AUTOCOMMIT 會呼叫。
CRecordsets
必須支援SQLAllocStmt, SQLPrepare, SQLExecute ( Open 和 Requery), SQLExecDirect (為更新作業), SQLFreeStmt 。 SQLNumResultCols 和 SQLDescribeCol 會呼叫在不同時間設定的結果。
SQLSetParam 為繫結參數資料和 DATA_AT_EXEC 功能大量使用。
SQLBindCol 廣泛使用於登錄輸出行 ODBC 資料儲存體儲存位置。
兩個 SQLGetData 呼叫用來擷取 SQL_LONG_VARCHAR 和 SQL_LONG_VARBINARY 資料。 先嘗試藉由呼叫 SQLGetData 尋找資料行值的總長度與 cbMaxValue 0,不過,以有效的 pcbValue。 如果 pcbValue 保留 SQL_NO_TOTAL,就會擲回例外狀況。 否則, HGLOBAL 會配置和進行的另一個 SQLGetData 呼叫擷取整個結果。
Updating
如果封閉式鎖定要求, SQLGetInfo SQL_LOCK_TYPES 要查詢。 如果 SQL_LCK_EXCLUSIVE 不受支援,將擲回例外狀況。
嘗試更新 CRecordset (snapshot 或 dynaset) 會使一秒 HSTMT 配置。 對於不支援第二個 HSTMT的驅動程式,資料指標程式庫會模擬這項功能。 可惜的是,這有時可能表示強制在第一個 HSTMT 的目前查詢到完成處理第二個 HSTMT 要求。
在更新作業期間,SQLFreeStmt SQL_CLOSE 和 SQL_RESET_PARAMS 和 SQLGetCursorName 會呼叫。
如果在 outputColumns的 CLongBinarys , ODBC 的必須支援 DATA_AT_EXEC 功能。 這包括從傳回 SQLExecDirect和 SQLParamData 和 SQLPutData的 SQL_NEED_DATA 。
SQLRowCount 在執行驗證之後呼叫 SQLExecDirect只更新 1 筆資料錄。
僅順向資料指標
只有 SQLFetch 對於 Move 作業所需的。 請注意 forwardOnly 游標不支援更新。
快照游標
快照功能需要 SQLExtendedFetch 支援。 如先前所述, ODBC 資料指標程式庫會偵測驅動程式時不支援 SQLExtendedFetch,並提供必要的支援。
SQLGetInfo, SQL_SCROLL_OPTIONS 必須支援 SQL_SO_STATIC。
Dynaset 游標
下面所需的最小支援開啟動態集:
SQLGetInfo, SQL_ODBC_VER 必須傳回「 > 01 "。
SQLGetInfo, SQL_SCROLL_OPTIONS 必須支援 SQL_SO_KEYSET_DRIVEN。
SQLGetInfo, SQL_ROW_UPDATES 必須傳回「Y」。
SQLGetInfo, SQL_POSITIONED_UPDATES 必須支援 SQL_PS_POSITIONED_DELETE 和 SQL_PS_POSITIONED_UPDATE。
此外,如果,封閉式鎖定要求,對 SQLSetPos 的呼叫與 irow 1, fRefresh false 和群組 SQL_LCK_EXCLUSIVE 即將執行。