更新 SQL Server Native Client 中 SQL Server 數據指標中的數據

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Platform System (PDW)

透過 SQL Server 資料指標擷取和更新資料時,SQL Server Native Client OLE DB 提供者取用者應用程式會受到套用至任何其他用戶端應用程式的相同考慮和限制。

只有在 SQL Server 資料指標中的資料列才會參與並行資料存取控制。 取用者要求可修改的資料列集時,並行控制會由 DBPROP_LOCKMODE 所控制。 若要修改並行存取控制的層級,取用者會先設定 DBPROP_LOCKMODE 屬性,然後再開啟資料列集。

如果用戶端應用程式設計讓交易長時間保持開啟狀態,交易隔離等級可能會對資料列定位造成重大落後。 根據預設,SQL Server Native Client OLE DB 提供者會使用DBPROPVAL_TI_READCOMMITTED所指定的讀取認可隔離等級。 當數據列集並行存取是唯讀時,SQL Server Native Client OLE DB 提供者支持臟讀取隔離。 因此,取用者可以在可修改的資料列集中要求較高的隔離等級,但是無法成功要求任何較低的等級。

立即和延遲更新模式

在立即更新模式下,每呼叫 IRowsetChange::SetData 一次,就會往返 SQL Server 一次。 如果取用者對單一資料列進行多個變更,利用單一 SetData 呼叫提交所有變更會更有效率。

在延遲更新模式下, IRowsetUpdate::UpdatecRowsrghRows 參數中指定的每個資料列,才會往返 SQL Server。

在任一種模式下,當資料列集沒有開啟任何交易物件時,往返代表不同的交易。

當您使用 IRowsetUpdate::Update 時,SQL Server Native Client OLE DB 提供者會嘗試處理每個指定的數據列。 因為任何數據列的數據、長度或狀態值無效而發生錯誤,並不會停止 SQL Server Native Client OLE DB 提供者處理。 參與更新的其他所有資料列或沒有任何資料列可能會遭到修改。 取用者必須檢查傳 回的 prgRowStatus 陣列,以判斷當 SQL Server Native Client OLE DB 提供者傳回DB_S_ERRORSOCCURRED時,任何特定數據列的失敗。

取用者不應該假設資料列會以任何特定順序處理。 如果取用者需要透過一個以上的單一資料列進行資料修改的排序處理,取用者應該以應用程式邏輯建立該順序,並開啟交易來包含程序。

另請參閱

更新資料列集中的資料