Actualizar datos en cursores de SQL Server
Cuando se capturan y actualizan datos mediante cursores de SQL Server, las mismas consideraciones y restricciones que se aplican a cualquier otra aplicación cliente son válidas para una aplicación de consumidor de proveedor OLE DB de SQL Server Native Client.
Solo las filas de cursores de SQL Server participan en el control del acceso simultáneo a datos. Cuando el consumidor solicita un conjunto de filas modificable, DBPROP_LOCKMODE controla el control de simultaneidad. 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 las transacciones pueden producir diferencias significativas en la posición de las filas si el diseño de la aplicación 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 utiliza 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 la lectura no actualizada cuando la simultaneidad del conjunto de filas es de solo lectura. Por consiguiente, el consumidor puede solicitar un nivel superior de aislamiento en un conjunto de filas modificable pero no puede solicitar con éxito un nivel inferior.
Modos de actualización inmediata y retrasada
En el modo de actualización inmediata, cada llamada a IRowsetChange::SetData produce un viaje de ida y vuelta (round trip) a SQL Server. Si el consumidor realiza varios cambios en una única fila, resulta más eficaz enviar todos los cambios con una única llamada a SetData.
En el modo de actualización retrasada, se realiza un viaje de ida y vuelta a SQL Server para cada fila indicada en los parámetros cRows y rghRows de IRowsetUpdate::Update.
En ambos modos, un viaje de ida y vuelta representa una transacción distinta cuando no queda abierto ningún objeto de transacción para el conjunto de filas.
Cuando se está utilizando IRowsetUpdate::Update, el proveedor OLE DB de SQL Server Native Client intenta procesar cada una de las filas indicadas. Cuando se produce un error debido a valores de datos, longitud, o estado no válidos en cualquier fila, el procesamiento del proveedor OLE DB de SQL Server Native Client no se detiene. Se pueden modificar todas o ninguna de las demás filas que participan en la actualización. El consumidor debe examinar la matriz prgRowStatus devuelta para determinar el error que se haya podido producir en una fila concreta 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 un orden determinado. Si un consumidor necesita el procesamiento ordenado de modificación de datos en más de una fila, debe establecer ese orden en la lógica de la aplicación y abrir una transacción para incluir en ella el proceso.