Partilhar via


Atualização de linhas por marcador com SQLBulkOperations

Ao atualizar uma linha por marcador, SQLBulkOperations faz a fonte de dados atualizar uma ou mais linhas da tabela. As linhas são identificadas pelo marcador numa coluna de marcadores vinculada. A linha é atualizada usando dados nos buffers de aplicação para cada coluna vinculada (exceto quando o valor no buffer indicador de comprimento de uma coluna é SQL_COLUMN_IGNORE). Colunas não encadernadas não serão atualizadas.

Para atualizar linhas por marcador com SQLBulkOperations, a aplicação:

  1. Recupera e armazena em cache os marcadores de todas as linhas a atualizar. Se houver mais do que um marcador e se for usada encadernação por colunas, os marcadores são armazenados numa matriz; Se existirem mais do que um marcador e for usada encadernação por linhas, os marcadores são armazenados numa matriz de estruturas de linhas.

  2. Define o atributo da instrução SQL_ATTR_ROW_ARRAY_SIZE ao número de favoritos e vincula o buffer que contém o valor dos favoritos, ou o array de favoritos, à coluna 0.

  3. Coloca os novos valores de dados nos buffers do conjunto de linhas. Para 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. Este é o comprimento em bytes dos dados ou SQL_NTS para colunas ligadas a buffers de string, o comprimento em bytes dos dados para colunas ligadas a buffers binários, e SQL_NULL_DATA para quaisquer colunas que sejam definidas como NULL.

  5. Define o valor no buffer de comprimento/indicador das colunas que não devem ser atualizadas para SQL_COLUMN_IGNORE. Embora a aplicação possa saltar este passo e reenviar dados existentes, isto é 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 para SQL_UPDATE_BY_BOOKMARK.

Para cada linha enviada para a fonte de dados como atualização, os buffers da aplicação devem ter dados de linha válidos. Se os buffers da aplicação forem preenchidos por busca, se um array de estado de linha foi mantido, e se o valor de estado de uma linha for SQL_ROW_DELETED, SQL_ROW_ERROR ou SQL_ROW_NOROW, dados inválidos podem ser enviados inadvertidamente para a fonte de dados.