Compartir por


Actualizar las filas por marcador con SQLBulkOperations

Al actualizar una fila por marcador, SQLBulkOperations realiza la actualización del origen de datos una o varias filas de la tabla. El marcador identifica las filas en una columna de marcador enlazada. La fila se actualiza mediante datos en los búferes de aplicación para cada columna enlazada (excepto cuando el valor del búfer de longitud o indicador de una columna es SQL_COLUMN_IGNORE). Las columnas sin enlazar no se actualizarán.

Para actualizar las filas por marcador con SQLBulkOperations, la aplicación:

  1. Recupera y almacena en caché los marcadores de todas las filas que se van a actualizar. Si hay más de un marcador y se usa el enlace con columnas, los marcadores se almacenan en una matriz; Si hay más de un marcador y se usa el enlace de fila, los marcadores se almacenan en una matriz de estructuras de fila.

  2. Establece el atributo de instrucción SQL_ATTR_ROW_ARRAY_SIZE en el número de marcadores y enlaza el búfer que contiene el valor del marcador, o la matriz de marcadores, en la columna 0.

  3. Coloca los nuevos valores de datos en los búferes del conjunto de filas. Para obtener información sobre cómo enviar datos largos con SQLBulkOperations, vea Datos largos y SQLSetPos y SQLBulkOperations.

  4. Establece el valor en el búfer de longitud o indicador de cada columna según sea necesario. Esta es la longitud de bytes de los datos o SQL_NTS para las columnas enlazadas a búferes de cadena, la longitud de bytes de los datos de las columnas enlazadas a búferes binarios y SQL_NULL_DATA para que las columnas se establezcan en NULL.

  5. Establece el valor en el búfer de longitud o indicador de las columnas que no se van a actualizar a SQL_COLUMN_IGNORE. Aunque la aplicación puede omitir este paso y reenviar los datos existentes, esto es ineficaz y corre el riesgo de enviar valores al origen de datos que se truncaron cuando se leyeron.

  6. Llama a SQLBulkOperations con el argumento Operation establecido en SQL_UPDATE_BY_BOOKMARK.

Para cada fila que se envía al origen de datos como actualización, los búferes de la aplicación deben tener datos de fila válidos. Si los búferes de la aplicación se rellenaron recuperando, si se ha mantenido una matriz de estado de fila y si el valor de estado de una fila es SQL_ROW_DELETED, SQL_ROW_ERROR o SQL_ROW_NOROW, los datos no válidos podrían enviarse accidentalmente al origen de datos.