Compartilhar via


Introdução a DiffGrams em SQLXML 4.0

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

Formato DiffGram

Este é o formato geral de DiffGram:

<?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 nestes blocos:

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

  • <diffgr:before>
    Este bloco opcional contém as instâncias do registro original (elementos) que devem ser atualizadas ou excluídas. Todas as tabelas de banco de dados modificadas (atualizadas ou excluídas) por DiffGram devem ser exibidas como elementos de nível superior no bloco <before>.

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

Anotações de DiffGram

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

  • id
    Este atributo é usado para emparelhar os elementos dos blocos <before> e <DataInstance>.

  • hasChanges
    Em uma operação de inserção ou de atualização, o DiffGram deve especificar esse atributo com o valor inserted ou modified. Caso esse atributo não esteja presente, o elemento correspondente em <DataInstance> é ignorado pela lógica de processamento, e nenhuma atualização é realizada. Para obter exemplos de funcionamento, consulte Exemplos de DiffGram (SQLXML 4.0).

  • parentID
    Este atributo é usado para especificar relações pai/filho entre os elementos em DiffGram. Esse atributo só exibido no bloco <before>. Ele é usado pelo SQLXML durante a aplicação das atualizações. A relação pai/filho é usada para determinar a ordem na qual os elementos de DiffGram são processados.

Compreendendo a lógica de processamento de DiffGram

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

Operação

Descrição

Inserção

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

Caso o atributo diffgr:hasChanges não seja especificado, o elemento é ignorado pela lógica de processamento, e nenhuma inserção é realizada. Para obter exemplos de funcionamento, consulte Exemplos de DiffGram (SQLXML 4.0).

Atualização

O DiffGram indica uma operação de atualização quando há um elemento no bloco <before> para o qual existe 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 modified no elemento do bloco <DataInstance>.

Caso o atributo diffgr:hasChanges não seja especificado no elemento do bloco <DataInstance>, um erro é retornado pela lógica de processamento. Para obter exemplos de funcionamento, consulte Exemplos de DiffGram (SQLXML 4.0).

Caso diffgr:parentID seja especificado no bloco <before>, a relação pai/filho dos elementos especificados por parentID é usada para determinar a ordem na qual os registros são atualizados.

Exclusão

Um DiffGram indica uma operação de exclusão quando um elemento é exibido no bloco <before>, mas não no bloco <DataInstance> correspondente. Nesse caso, o DiffGram exclui a instância do registro especificada no bloco <before> do banco de dados. Para obter exemplos de funcionamento, consulte Exemplos de DiffGram (SQLXML 4.0).

Caso diffgr:parentID seja especificado no bloco <before>, a relação pai/filho dos elementos especificados por parentID é usada para determinar a ordem na qual os registros são excluídos.

ObservaçãoObservação

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