Compartir a través de


Actualizar datos en cursores de SQL Server

Al capturar y actualizar datos a través de cursores de SQL Server, una aplicación de consumidor del proveedor OLE DB de SQL Server Native Client está enlazada por las mismas consideraciones y restricciones que se aplican a cualquier otra aplicación cliente.

Solo las filas de los cursores de SQL Server participan en el control simultáneo de acceso a datos. Cuando el consumidor solicita un conjunto de filas modificable, el control de simultaneidad se controla mediante DBPROP_LOCKMODE. Para modificar el nivel de control de acceso simultáneo, el consumidor establece la propiedad DBPROP_LOCKMODE antes de abrir el conjunto de filas.

Los niveles de aislamiento de transacciones pueden provocar retrasos significativos en el posicionamiento de filas si el diseño de aplicaciones cliente permite que las transacciones permanezcan abiertas durante largos períodos de tiempo. De forma predeterminada, el proveedor OLE DB de SQL Server Native Client usa el nivel de aislamiento de lectura confirmada especificado por DBPROPVAL_TI_READCOMMITTED. El proveedor OLE DB de SQL Server Native Client admite el aislamiento de lectura sucio cuando la simultaneidad del conjunto de filas es de solo lectura. Por lo tanto, el consumidor puede solicitar un mayor nivel de aislamiento en un conjunto de filas modificable, pero no puede solicitar ningún nivel inferior correctamente.

Modos de actualización inmediatos y retrasados

En el modo de actualización inmediata, cada llamada a IRowsetChange::SetData provoca un recorrido de ida y vuelta a SQL Server. Si el consumidor realiza varios cambios en una sola fila, es más eficaz enviar todos los cambios con una sola llamada a SetData .

En el modo de actualización retrasada, se realiza un recorrido de ida y vuelta a SQL Server para cada fila indicada en los parámetros cRows y rghRows de IRowsetUpdate::Update.

En cualquier modo, un recorrido de ida y vuelta representa una transacción distinta cuando no hay ningún objeto de transacción abierto para el conjunto de filas.

Cuando usa IRowsetUpdate::Update, el proveedor OLE DB de SQL Server Native Client intenta procesar cada fila indicada. Un error que se produce debido a los valores de datos, longitud o estado no válidos para cualquier fila no detiene el procesamiento del proveedor OLE DB de SQL Server Native Client. Todas o ninguna de las demás filas que participan en la actualización se pueden modificar. El consumidor debe examinar la matriz prgRowStatus devuelta para determinar el error de cualquier fila específica cuando el proveedor OLE DB de SQL Server Native Client devuelve DB_S_ERRORSOCCURRED.

Un consumidor no debe suponer que las filas se procesan en ningún orden específico. Si un consumidor requiere el procesamiento ordenado de la modificación de datos en más de una sola fila, el consumidor debe establecer ese orden en la lógica de la aplicación y abrir una transacción para incluir el proceso.

Véase también

Actualizar datos en conjuntos de filas