Partilhar via


Atualizar linhas por indicador com SQLBulkOperations

Ao atualizar uma linha por indicador, o SQLBulkOperations faz a fonte de dados atualizar uma ou mais linhas da tabela. As linhas são identificadas pelo indicador em uma coluna de indicador associada. A linha é atualizada usando dados nos buffers de aplicativo para cada coluna associada (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 as linhas por indicador com SQLBulkOperations, o aplicativo:

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

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

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

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

  5. Define o valor no buffer de comprimento/indicador daquelas colunas que não devem ser atualizadas para SQL_COLUMN_IGNORE. Embora o aplicativo possa ignorar essa etapa e reenviar os dados, isso é ineficiente e acarreta o risco de enviar valores para a fonte de dados que foram truncados ao serem 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 do aplicativo devem ter dados de linha válidos. Se os buffers do aplicativo foram preenchidos efetuando fetch, se uma matriz de status de linha tiver sido mantida e se o valor de status de uma linha for SQL_ROW_DELETED, SQL_ROW_ERROR ou SQL_ROW_NOROW, dados inválidos poderão ser enviados inadvertidamente para a fonte de dados.