Compartilhar via


Atualizar linhas por indicador com SQLBulkOperations

Ao atualizar uma linha por marcador, SQLBulkOperations faz com que a fonte de dados atualize uma ou mais linhas da tabela. As linhas são identificadas pelo marcador em uma coluna de marcador vinculada. A linha é atualizada usando dados nos buffers de aplicativo para cada coluna vinculada (exceto quando o valor no buffer de comprimento/indicador de uma coluna é SQL_COLUMN_IGNORE). As colunas não associadas não serão atualizadas.

Para atualizar linhas por marcador com SQLBulkOperations, o aplicativo:

  1. Recupera e armazena em cache os marcadores de todas as linhas a serem atualizadas. Se houver mais de um indicador e a associação em termos de coluna for usada, os indicadores serão armazenados em uma matriz; se houver mais de um indicador e a associação em linha for usada, os indicadores serão armazenados em uma matriz de estruturas de linha.

  2. Define o atributo de instrução SQL_ATTR_ROW_ARRAY_SIZE para o número de marcadores e associa o buffer que contém o valor do marcador ou a matriz de marcadores à coluna 0.

  3. Coloca os novos valores de dados nos buffers do conjunto de linhas. Para obter informações sobre como enviar dados longos com SQLBulkOperations, consulte Long Data e SQLSetPos e SQLBulkOperations.

  4. Define o valor no buffer de comprimento/indicador de cada coluna conforme necessário. Esse é o comprimento de byte dos dados ou SQL_NTS para colunas associadas a buffers de cadeia de caracteres, o comprimento de bytes dos dados para colunas associadas a buffers binários e SQL_NULL_DATA para que todas as colunas sejam definidas como NULL.

  5. Define o valor no buffer de comprimento/indicador para as colunas que não serão atualizadas, configurando-as como SQL_COLUMN_IGNORE. Embora o aplicativo possa ignorar essa etapa e reenviar dados existentes, isso é ineficiente e corre o risco de enviar valores para a fonte de dados que foram truncados quando foram lidos.

  6. Chama SQLBulkOperations com o argumento Operation definido como SQL_UPDATE_BY_BOOKMARK.

Para cada linha enviada à fonte de dados como uma atualização, os buffers de aplicativo devem ter dados de linha válidos. Se os buffers da aplicação foram preenchidos por meio de busca, se uma matriz de status de linha foi mantida, e o valor de status para uma linha for SQL_ROW_DELETED, SQL_ROW_ERROR ou SQL_ROW_NOROW, dados inválidos poderão ser enviados para a fonte de dados inadvertidamente.