在 SQL Server Native Client 中更新 SQL Server 游标中的数据

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(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::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 数组以确定任何特定行的失败。

使用者不应假定行以任意特定顺序处理。 如果使用者要求按顺序处理基于多个行的数据修改,使用者应在应用程序逻辑中建立该顺序,并打开一个事务以包含该过程。

另请参阅

更新行集中的数据