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 o DiffGram fosse gerado de um conjunto de dados no .NET Framework, o valor da propriedade Name do conjunto de dados seria usado como o nome desse 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 DiffGram ignora os elementos neste bloco para o qual o atributo diffgr:hasChanges não é 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 que estão sendo modificadas (atualizadas ou excluídas) pelo DiffGram devem aparecer como elementos de nível superior no <bloco anterior> .
<diffgr:errors>
Este bloco opcional é ignorado 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
Este atributo é usado para especificar relações pai/filho entre os elementos em DiffGram. Esse atributo aparece somente no <bloco anterior> . 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 |
---|---|
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). |
Atualizar | 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 antes>, 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.