索引鍵集資料指標
索引鍵集資料指標會提供在靜態與動態資料指標之間偵測變更的功能。 如同靜態資料指標,它不一定會偵測結果集的成員資格和順序變更。 如同動態資料指標,它會偵測結果集中的資料列值變更。
索引鍵集驅動資料指標是由稱為索引鍵集的一組唯一識別碼 (索引鍵) 所控制。 索引鍵是從結果集中唯一識別資料列的一組資料行建立的。 索引鍵集是一組取自由查詢陳述式傳回之所有資料列的索引鍵值。
使用索引鍵集驅動資料指標,會在資料指標中為每個資料列建置和保留一個索引鍵,並儲存在用戶端工作站或伺服器上。 當您存取每個資料列時,會使用此預存金鑰從資料來源擷取目前的資料值。 在索引鍵集驅動資料指標中,當完整擴展索引鍵集時,結果集的成員資格會遭到凍結。 之後,在重新開啟之前,都不會在結果集中新增或更新受影響的成員資格。
當使用者捲動結果集時,可看見資料值的變更 (索引鍵集擁有者或其他處理序所做的變更)。 只有在關閉並重新開啟資料指標之後,才能看見其他處理序在資料指標外部執行的插入。 在結果集結尾可看見從資料指標內部執行的插入。
當索引鍵集驅動資料指標嘗試擷取已刪除的資料列時,該資料列在結果集內會顯示為「漏洞」。 索引鍵集中存在資料列的索引鍵,但結果集中不再有此資料列。 如果更新資料列中的索引鍵值,則會將資料列視為刪除後再插入的資料列,因此這類資料列也會在結果集中顯示為漏洞。 雖然索引鍵集驅動資料指標一律可以偵測到其他程序刪除的資料列,但可能會選擇性地移除其本身刪除的資料列所擁有的索引鍵。 這麼做的索引鍵集驅動資料指標便無法偵測自己的刪除,因為辨識項已遭移除。
更新索引鍵資料行的運作方式,就像刪除舊索引鍵再插入新索引鍵一樣。 如果未透過資料指標進行更新,則看不到新的索引鍵值。 如果有透過資料指標進行更新,則可以在結果集結尾看到新的索引鍵值。
索引鍵集驅動資料指標有一個變體,我們稱之為索引鍵集驅動標準資料指標。 在索引鍵集驅動標準資料指標中,結果集內的資料列成員資格和資料列的順序會在資料指標開啟時固定,但我們可以看到資料指標擁有者所做的值變更和其他程序所做的已認可變更。 如果變更會讓資料列失去成員資格,或是會影響資料列的順序,則除非將資料指標先關閉再重新開啟,否則資料列不會消失或移動。 插入的資料不會出現,但對於現有資料所做的變更,則會在擷取資料列時出現。
索引鍵集驅動資料指標很難正確使用,因為如上所述,資料變更的敏感度取決於許多不同的情況。 不過,如果您的應用程式不在意並行更新、能以程式設計方式處理不正確的索引鍵,而且必須直接存取加上索引鍵的特定資料列,則索引鍵集驅動資料指標可能就適合您。 請使用 adOpenKeyset CursorTypeEnum 來指出您想要在 ADO 中使用索引鍵集資料指標。