透過 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::Update 的 cRows 和 rghRows 參數中所指出的每個數據列,對 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時,任何特定數據列的失敗。
取用者不應假設數據列會以任何特定順序處理。 如果取用者需要透過多個數據列進行數據修改的排序處理,取用者應該在應用程式邏輯中建立該順序,並開啟交易來封入進程。