Compartilhar via


Introdução a DiffGrams em SQLXML 4.0

Este tópico fornece uma breve introdução aos DiffGrams.

Formato DiffGram

Este é o formato DiffGram geral:

<?xml version="1.0"?>  
<diffgr:diffgram   
         xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"  
         xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"  
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
   <DataInstance>  
      ...  
   </DataInstance>  
   [<diffgr:before>  
        ...  
   </diffgr:before>]  
  
   [<diffgr:errors>  
        ...  
   </diffgr:errors>]  
</diffgr:diffgram>  

O formato DiffGram consiste nesses blocos:

<DataInstance>
O nome desse elemento, DataInstance, é usado para fins explicativos nesta documentação. Por exemplo, se o DiffGram tiver sido gerado de um conjunto de dados no .NET Framework, o valor da propriedade Name do conjunto de dados será usado como o nome desse elemento. Esse bloco contém todos os dados relevantes após a alteração, possivelmente incluindo dados que não foram modificados. A lógica de processamento DiffGram ignora os elementos neste bloco para o qual o atributo diffgr:hasChanges não é especificado.

<diffgr:before>
Esse bloco opcional contém as instâncias de registro originais (elementos) que devem ser atualizadas ou excluídas. Todas as tabelas de banco de dados que estão sendo modificadas (atualizadas ou excluídas) pelo DiffGram devem aparecer como elementos de nível superior no <bloco anterior> .

<diffgr:errors>
Esse bloco opcional é ignorado pela lógica de processamento de DiffGram.

Anotações de DiffGram

Essas anotações são definidas no namespace DiffGram "urn:schemas-microsoft-com:xml-diffgram-01":

id
Esse atributo é usado para emparelhar os elementos nos <blocos antes> e <DataInstance> .

hasChanges
Para uma operação de inserção ou atualização, o DiffGram deve especificar esse atributo com o valor inserido ou modificado. Se esse atributo não estiver presente, o elemento correspondente no <DataInstance> será ignorado pela lógica de processamento e nenhuma atualização será executada. Para obter exemplos de trabalho, consulte Exemplos de DiffGram (SQLXML 4.0).

parentID
Esse atributo é usado para especificar relações pai-filho entre os elementos no DiffGram. Esse atributo aparece somente no <bloco anterior> . Ele é usado pelo SQLXML ao aplicar atualizações. A relação pai-filho é usada para determinar a ordem na qual os elementos no DiffGram são processados.

Noções básicas sobre a lógica de processamento de DiffGram

A lógica de processamento DiffGram usa determinadas regras para determinar se uma operação é uma operação de inserção, atualização ou exclusão. Essas regras são descritas na tabela a seguir.

Operação Descrição
Inserir Um DiffGram indica uma operação de inserção quando um elemento aparece no <bloco DataInstance>, mas não no bloco anterior> correspondente<, e o atributo diffgr:hasChanges é especificado (diffgr:hasChanges=inserted) no elemento. Nesse caso, o DiffGram insere a instância de registro especificada no <bloco DataInstance> no banco de dados.

Se o atributo diffgr:hasChanges não for especificado, o elemento será ignorado pela lógica de processamento e nenhuma inserção será executada. Para obter exemplos de trabalho, consulte Exemplos de DiffGram (SQLXML 4.0).
Atualização O DiffGram indica uma operação de atualização quando há um elemento no bloco anterior> para o <qual há um elemento correspondente no <bloco DataInstance> (ou seja, ambos os elementos têm um atributo diffgr:id com o mesmo valor) e o atributo diffgr:hasChanges é especificado com o valor modificado no elemento no <bloco DataInstance>.

Se o atributo diffgr:hasChanges não for especificado no elemento no <bloco DataInstance> , um erro será retornado pela lógica de processamento. Para obter exemplos de trabalho, consulte Exemplos de DiffGram (SQLXML 4.0).

Se diffgr:parentID for especificado no <bloco anterior> , a relação pai-filho de elementos especificados por parentID será usada para determinar a ordem na qual os registros são atualizados.
Excluir Um DiffGram indica uma operação de exclusão quando um elemento aparece no <bloco anterior>, mas não no bloco DataInstance> correspondente<. Nesse caso, o DiffGram exclui a instância de registro especificada no <bloco anterior> do banco de dados. Para obter exemplos de trabalho, consulte Exemplos de DiffGram (SQLXML 4.0).

Se diffgr:parentID for especificado no <bloco anterior> , a relação pai-filho de elementos especificados por parentID será usada para determinar a ordem na qual os registros são excluídos.

Observação

Parâmetros não podem ser passados para DiffGrams.