SQLFetchScroll (資料指標程式庫)
重要
Windows 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 Microsoft 建議使用驅動程式的資料指標功能。
本主題討論在資料指標程式庫中使用 SQLFetchScroll 函式。 如需 SQLFetchScroll 的 一般資訊,請參閱 SQLFetchScroll 函式 。
資料指標程式庫會藉由在驅動程式中重複呼叫 SQLFetch 來實 作 SQLFetchScroll 。 它會將它從驅動程式擷取的資料傳輸到應用程式所提供的資料列集緩衝區。 它也會快取記憶體和磁片檔案中的資料。 當應用程式要求新的資料列集時,資料指標程式庫會視需要從驅動程式擷取它(如果先前尚未擷取),或快取(如果先前已擷取)。 最後,資料指標程式庫會維護快取資料的狀態,並將此資訊傳回至資料列狀態陣列中的應用程式。
使用資料指標程式庫時,對 SQLFetchScroll 的 呼叫無法與對 SQLFetch 或 SQLExtendedFetch 的 呼叫 混合。
使用資料指標程式庫時,ODBC 2 支援對 SQLFetchScroll 的呼叫 。 x 和 for ODBC 3。 x 驅動程式。
資料列集緩衝區
如果下列情況,資料指標程式庫會將資料從驅動程式傳輸到應用程式所提供的資料列集緩衝區優化:
應用程式會使用資料列系結。
應用程式宣告要保存資料列的結構中的欄位之間沒有未使用的位元組。
SQLFetch 或 SQLFetchScroll 傳回資料行長度/指標的欄位 會遵循該資料行的緩衝區,並在下一個資料行的緩衝區之前。 這些欄位是選擇性的。
當應用程式要求新的資料列集時,資料指標程式庫會視需要從其快取和驅動程式擷取資料。 如果新的和舊的資料列集重迭,資料指標程式庫可以重複使用資料列集緩衝區重迭區段的資料,以優化其效能。 因此,除非新的和舊的資料列集重迭,而且變更位於資料列集緩衝區的重迭區段中,否則資料列集緩衝區的未儲存變更會遺失。 為了儲存變更,應用程式會提交定位的更新語句。
請注意,當應用程式呼叫 SQLFetchScroll 並將 FetchOrientation 引數設定為 SQL_FETCH_RELATIVE 且 FetchOffset 引數設定為 0 時,資料指標程式庫一律會以快取中的資料重新整理資料列集緩衝區。
資料指標程式庫支援使用 SQL_ATTR_ROW_ARRAY_SIZE屬性呼叫 SQLSetStmtAttr ,以在開啟資料指標時變更資料列集大小。 下次呼叫 SQLFetchScroll 時 ,新的資料列集大小將會生效。
結果集成員資格
資料指標程式庫只會在應用程式要求時,從驅動程式擷取資料。 視資料來源和 SQL_CONCURRENCY 語句屬性的設定而定,這會產生下列結果:
資料指標程式庫所擷取的資料可能與執行語句時可用的資料不同。 例如,在開啟資料指標之後,某些驅動程式可以擷取插入目前資料指標位置之後插入的資料列。
結果集中的資料可能會由資料指標程式庫的資料來源鎖定,因此其他使用者無法使用。
在資料指標程式庫快取資料列之後,它便無法偵測基礎資料來源中該資料列的變更(除了在相同資料指標快取上操作的位置更新和刪除之外)。 這是因為針對對 SQLFetchScroll 的 呼叫,資料指標程式庫永遠不會從資料來源重新擷取資料。 相反地,它會從快取重新擷取資料。
捲動
資料指標程式庫支援 SQLFetchScroll 中的 下列擷取類型。
資料指標類型 | 擷取 |
---|---|
順向 | SQL_FETCH_NEXT |
靜態 | SQL_FETCH_NEXT SQL_FETCH_PRIOR SQL_FETCH_FIRST SQL_FETCH_LAST SQL_FETCH_RELATIVE SQL_FETCH_ABSOLUTE SQL_FETCH_BOOKMARK |
錯誤
呼叫 SQLFetchScroll 且其中一個對 SQLFetch 的呼叫 傳回SQL_ERROR時,資料指標程式庫會繼續進行,如下所示。 完成這些步驟之後,資料指標程式庫會繼續處理。
呼叫 SQLGetDiagRec 以從驅動程式取得錯誤資訊,並將此資訊張貼為驅動程式管理員中的診斷記錄。
將診斷記錄中的 [SQL_DIAG_ROW_NUMBER] 欄位設定為適當的值。
如果適用,請將診斷記錄中的 [SQL_DIAG_COLUMN_NUMBER] 欄位設定為適當的值;否則,它會將它設定為 0。
將資料列狀態陣列中發生錯誤之資料列的值設定為SQL_ROW_ERROR。
在 SQLFetchScroll 的 實作中多次呼叫 SQLFetch 之後,其中一個呼叫 SQLFetch 所傳回的任何錯誤或警告都會位於診斷記錄中,而且可由對 SQLGetDiagRec 的呼叫 擷 取。 如果在擷取資料時截斷資料,截斷的資料現在會位於資料指標程式庫的快取中。 後續呼叫 SQLFetchScroll 以捲動至具有截斷資料的資料列將會傳回截斷的資料,而且不會引發任何警告,因為資料會從資料指標程式庫的快取擷取。 若要追蹤傳回的資料長度,以便判斷緩衝區中傳回的資料是否已截斷,應用程式應該系結長度/指標緩衝區。
書簽作業
資料指標程式庫支援使用 fetchOrientation SQL_FETCH_BOOKMARK呼叫 SQLFetchScroll 。 它也支援在可用於書簽作業的 FetchOffset 引數中指定位移。 這是資料指標程式庫唯一支援的書簽作業。 資料指標程式庫不支援呼叫 SQLBulkOperations 。
如果應用程式已設定 SQL_ATTR_USE_BOOKMARKS 語句屬性,且已系結至書簽資料行,則資料指標程式庫會產生固定長度的書簽,並將它傳回給應用程式。 資料指標程式庫會建立及維護其使用的書簽;它不會使用資料來源上維護的書簽。 呼叫 SQLFetchScroll 以擷取已經從資料來源擷取的資料區塊時,它會從資料指標程式庫快取擷取資料。 如此一 來,資料指標程式庫必須建立和維護呼叫 SQLFetchScroll 時,使用 fetchOrientation 進行SQL_FETCH_BOOKMARK的書簽。
與其他函式的互動
應用程式必須先呼叫 SQLFetch 或 SQLFetchScroll ,才能準備或執行任何定位的更新或刪除語句。