適用於 ODBC 3.x 應用程式的區塊資料指標、可捲動的資料指標和回溯相容性
SQLFetchScroll 和 SQLExtendedFetch 都代表 ODBC 在應用程式程式設計介面 (API) 之間的第一個明確分割,這是應用程式呼叫的一組函式,也都代表 Service Provider Interface (SPI),這是驅動程式實作的一組函式。 需要此分割才能平衡 ODBC 3.x 中的需求,此需求會使用 SQLFetchScroll 配合標準,並與使用 SQLExtendedFetch 的 ODBC 2.x 相容。
ODBC 3.x API 是應用程式呼叫的一組函式,包括 SQLFetchScroll 和相關陳述式屬性。 ODBC 3.x SPI 是驅動程式實作的一組函式,包括 SQLFetchScroll、SQLExtendedFetch 和相關陳述式屬性。 因為 ODBC 不會在 API 與 SPI 之間正式強制執行此分割,所以 ODBC 3.x 應用程式可以呼叫 SQLExtendedFetch 和相關陳述式屬性。 不過,沒有理由讓 ODBC 3.x 應用程式執行這項操作。 如需 API 和 SPI 的詳細資訊,請參閱 ODBC 架構簡介。
如需 ODBC 3.x 驅動程式管理員如何對應 ODBC 2.x 和 ODBC 3.x 驅動程式的呼叫以及 ODBC 3.x 驅動程式應該對於區塊和可捲動資料指標實作哪些函式和陳述式屬性有關的資訊,請參閱附錄 G:驅動程式回溯相容性指南中的驅動程式的用途。
下表摘要說明 ODBC 3.x 應用程式應該搭配區塊和可捲動的資料指標使用哪些函式和陳述式屬性。 這也會列出此區域中 ODBC 2.x 和 ODBC 3.x 之間的變更,ODBC 3.x 應用程式應該注意與 ODBC 2.x 驅動程式相容。
函式或 陳述式屬性 |
註解 |
---|---|
SQL_ATTR_FETCH_BOOKMARK_PTR | 指向要搭配 SQLFetchScroll 使用的書籤。 應用程式在 ODBC 2.x 驅動程式中進行此設定時,這必須指向固定長度的書籤。 |
SQL_ATTR_ROW_STATUS_PTR | 指向由 SQLFetch、SQLFetchScroll、SQLBulkOperations 和 SQLSetPos 填滿的資料列狀態陣列。 如果應用程式在 ODBC 2.x 驅動程式中進行此設定,並且在呼叫 SQLFetchScroll、SQLFetch 或 SQLExtendedFetch 之前呼叫具有 SQL_ADD 作業的 SQLBulkOperation,則會傳回 SQLSTATE HY011 (屬性目前無法設定)。 應用程式在 ODBC 2.x 驅動程式中呼叫 SQLFetch 時,SQLFetch 會對應於 SQLExtendedFetch,因此會傳回此陣列中的值。 |
SQL_ATTR_ROWS_FETCHED_PTR | 指向 SQLFetch 和 SQLFetchScroll 將擷取的資料列數目傳回的緩衝區。 應用程式在 ODBC 2.x 驅動程式中呼叫 SQLFetch 時,SQLFetch 會對應於 SQLExtendedFetch,因此會傳回此緩衝區中的值。 |
SQL_ATTR_ROW_ARRAY_SIZE | 設定資料列集大小。 如果應用程式在 ODBC 2.x 驅動程式中呼叫具有 SQL_ADD 的 SQLBulkOperations,對於呼叫將使用 SQL_ROWSET_SIZE,而不是 SQL_ATTR_ROW_ARRAY_SIZE,因為呼叫會對應於具有 SQL_ADD 作業的 SQLSetPos,其中會使用 SQL_ROWSET_SIZE。 在 ODBC 2.x 驅動程式中呼叫具有 SQL_ADD 或 SQLExtendedFetch作業的 SQLSetPos 會使用 SQL_ROWSET_SIZE。 在 ODBC 2.x 驅動程式中呼叫 SQLFetch 或 SQLFetchScroll 會使用 SQL_ATTR_ROW_ARRAY_SIZE。 |
SQLBulkOperations | 執行插入和書籤作業。 在 ODBC 2.x 驅動程式中呼叫具有 SQL_ADD 作業的 SQLBulkOperations 時,這會對應於具有 SQL_ADD作業的 SQLSetPos。 下列是實作詳細資料: - 使用 ODBC 2.x 驅動程式時,應用程式只能使用與 StatementHandle 相關聯的隱含配置 ARD;這無法配置另一個 ARD 來新增資料列,因為 ODBC 2.x 驅動程式不支援明確的描述項作業。 應用程式必須使用 SQLBindCol 繫結至 ARD,而不是 SQLSetDescField 或 SQLSetDescRec。 - 呼叫 ODBC 3.x 驅動程式時,應用程式可以在呼叫 SQLFetch 或 SQLFetchScroll 之前呼叫具有 SQL_ADD 作業的 SQLBulkOperations。 呼叫 ODBC 2.x 驅動程式時,應用程式必須先呼叫 SQLFetchScroll,才能呼叫具有 SQL_ADD 作業的 SQLBulkOperations。 |
SQLFetch | 傳回下一個資料列集。 下列是實作詳細資料: - 應用程式在 ODBC 2.x驅動程式中呼叫 SQLFetch 時,這會對應於 SQLExtendedFetch。 - 應用程式在 ODBC 3.x 驅動程式中呼叫 SQLFetch 時,這會傳回以 SQL_ATTR_ROW_ARRAY_SIZE 陳述式屬性指定的資料列數目。 |
SQLFetchScroll | 傳回指定的資料列集。 下列是實作詳細資料: - 應用程式在 ODBC 2.x 驅動程式中呼叫 SQLFetchScroll 時,這會在套用於單一資料列的每個錯誤之前傳回 SQLSTATE 01S01。 只有在因為 ODBC 3.x 驅動程式管理員將此對應於 SQLExtendedFetch,而 SQLExtendedFetch 會傳回此 SQLSTATE 時,才會傳回。 應用程式在 ODBC 3.x 驅動程式中呼叫 SQLFetchScroll 時,這永遠燈不會傳回 SQLSTATE 01S01 (資料列中的錯誤)。 - 應用程式在 ODBC 2.x 驅動程式中呼叫 SQLFetchScroll 並將 FetchOrientation 設定為 SQL_FETCH_BOOKMARK時,FetchOffset 引數必須設定為 0。 如果嘗試使用 ODBC 2.x 驅動程式進行位移式書籤擷取,會傳回 SQLSTATE HYC00 (未實作選用功能)。 |
注意
ODBC 3.x 應用程式不應該使用 SQLExtendedFetch 或 SQL_ROWSET_SIZE 陳述式屬性。 相反地,這些應用程式應該使用 SQLFetchScroll 和 SQL_ATTR_ROW_ARRAY_SIZE 陳述式屬性。 ODBC 3.x 應用程式不應該使用具有 SQL_ADD 作業的 SQLSetPos,但應該使用具有 SQL_ADD 作業的 SQLBulkOperations。