通过 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 访问接口处理。 可以修改参与更新的所有行或没有任何其他行。 当 SQL Server Native Client OLE DB 访问接口返回DB_S_ERRORSOCCURRED时,使用者必须检查返回的 prgRowStatus 数组以确定任何特定行的失败。
使用者不应假定行按任何特定顺序进行处理。 如果使用者需要对多个行的数据修改进行有序处理,则使用者应在应用程序逻辑中建立该顺序,并打开事务以封闭进程。