Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli esempi in questo argomento sono costituiti da DiffGram che eseguono operazioni di inserimento, aggiornamento ed eliminazione nel database. Prima di usare gli esempi, tenere presente quanto segue:
Gli esempi usano due tabelle (Cust e Ord) che devono essere create se si desidera testare gli esempi di DiffGram:
Cust(CustomerID, CompanyName, ContactName) Ord(OrderID, CustomerID)La maggior parte degli esempi in questo argomento usa lo schema XSD seguente:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:annotation> <xsd:documentation> Diffgram Customers/Orders Schema. </xsd:documentation> <xsd:appinfo> <sql:relationship name="CustomersOrders" parent="Cust" parent-key="CustomerID" child-key="CustomerID" child="Ord"/> </xsd:appinfo> </xsd:annotation> <xsd:element name="Customer" sql:relation="Cust"> <xsd:complexType> <xsd:sequence> <xsd:element name="CompanyName" type="xsd:string"/> <xsd:element name="ContactName" type="xsd:string"/> <xsd:element name="Order" sql:relation="Ord" sql:relationship="CustomersOrders"> <xsd:complexType> <xsd:attribute name="OrderID" type="xsd:int" sql:field="OrderID"/> <xsd:attribute name="CustomerID" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="CustomerID" type="xsd:string" sql:field="CustomerID"/> </xsd:complexType> </xsd:element> </xsd:schema>Salvare questo schema come DiffGramSchema.xml nella stessa cartella in cui si salvano altri file usati negli esempi.
Un. Eliminazione di un record utilizzando un DiffGram
DiffGram in questo esempio elimina un record customer (il cui CustomerID è ALFKI) dalla tabella Cust ed elimina il record dell'ordine corrispondente (il cui OrderID è 1) dalla tabella Ord.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:mapping-schema="DiffGramSchema.xml">
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DataInstance/>
<diffgr:before>
<Order diffgr:id="Order1"
msdata:rowOrder="0"
CustomerID="ALFKI"
OrderID="1"/>
<Customer diffgr:id="Customer1"
msdata:rowOrder="0"
CustomerID="ALFKI">
<CompanyName>Alfreds Futterkiste</CompanyName>
<ContactName>Maria Anders</ContactName>
</Customer>
</diffgr:before>
<msdata:errors/>
</diffgr:diffgram>
</ROOT>
<Nel blocco precedente> è presente un <elemento Order> (diffgr:id="Order1") e un <elemento Customer> (diffgr:id="Customer1"). Questi elementi rappresentano record esistenti nel database. L'elemento <DataInstance> non dispone dei record corrispondenti (con lo stesso diffgr:id). Indica un'operazione di eliminazione.
Per testare DiffGram
Creare queste tabelle nel database tempdb .
CREATE TABLE Cust( CustomerID nchar(5) Primary Key, CompanyName nvarchar(40) NOT NULL , ContactName nvarchar(60) NULL) GO CREATE TABLE Ord( OrderID int Primary Key, CustomerID nchar(5) Foreign Key REFERENCES Cust(CustomerID)) GOAggiungere questi dati di esempio:
INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ALFKI', N'Alfreds Futterkiste', N'Maria Anders') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANATR', N'Ana Trujillo Emparedados y helados', N'Ana Trujillo') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANTON', N'Antonio Moreno Taquer??a', N'Antonio Moreno') INSERT INTO Ord(OrderID, CustomerID) VALUES(1, N'ALFKI') INSERT INTO Ord(OrderID, CustomerID) VALUES(2, N'ANATR') INSERT INTO Ord(OrderID, CustomerID) VALUES(3, N'ANTON')Copiare il DiffGram sopra e incollarlo in un file di testo. Salvare il file come MyDiffGram.xml nella stessa cartella usata nel passaggio precedente.
Copiare il diffGramSchema fornito in precedenza in questo argomento e incollarlo in un file di testo. Salvare il file come DiffGramSchema.xml.
Creare e usare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire DiffGram.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
B. Inserimento di un record utilizzando un DiffGram
In questo esempio, DiffGram inserisce un record nella tabella Cust e un record nella tabella Ord.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"
sql:mapping-schema="DiffGramSchema.xml">
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DataInstance>
<Customer diffgr:id="Customer1" msdata:rowOrder="0"
diffgr:hasChanges="inserted" CustomerID="ALFKI">
<CompanyName>C3Company</CompanyName>
<ContactName>C3Contact</ContactName>
<Order diffgr:id="Order1"
msdata:rowOrder="0"
diffgr:hasChanges="inserted"
CustomerID="ALFKI" OrderID="1"/>
</Customer>
</DataInstance>
</diffgr:diffgram>
</ROOT>
In questo DiffGram il <blocco prima> non viene specificato (nessun record di database esistente identificato). Esistono due istanze di record (identificate dagli <elementi Customer> e <Order> nel <blocco DataInstance> ) che eseguono rispettivamente il mapping alle tabelle Cust e Ord. Entrambi questi elementi specificano l'attributo diffgr:hasChanges (hasChanges="inserted"). Indica un'operazione di inserimento. In questo DiffGram, se si specifica hasChanges="modified", si indica che si desidera modificare un record che non esiste, che genera un errore.
Per testare DiffGram
Creare queste tabelle nel database tempdb .
CREATE TABLE Cust( CustomerID nchar(5) Primary Key, CompanyName nvarchar(40) NOT NULL , ContactName nvarchar(60) NULL) GO CREATE TABLE Ord( OrderID int Primary Key, CustomerID nchar(5) Foreign Key REFERENCES Cust(CustomerID)) GOAggiungere questi dati di esempio:
INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ALFKI', N'Alfreds Futterkiste', N'Maria Anders') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANATR', N'Ana Trujillo Emparedados y helados', N'Ana Trujillo') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANTON', N'Antonio Moreno Taquer??a', N'Antonio Moreno') INSERT INTO Ord(OrderID, CustomerID) VALUES(1, N'ALFKI') INSERT INTO Ord(OrderID, CustomerID) VALUES(2, N'ANATR') INSERT INTO Ord(OrderID, CustomerID) VALUES(3, N'ANTON')Copiare il DiffGram sopra e incollarlo in un file di testo. Salvare il file come MyDiffGram.xml nella stessa cartella usata nel passaggio precedente.
Copiare il diffGramSchema fornito in precedenza in questo argomento e incollarlo in un file di testo. Salvare il file come DiffGramSchema.xml.
Creare e usare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire DiffGram.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
C. Aggiornamento di un record esistente tramite un DiffGram
In questo esempio, DiffGram aggiorna le informazioni sui clienti (CompanyName e ContactName) per il cliente ALFKI.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:mapping-schema="DiffGramSchema.xml">
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DataInstance>
<Customer diffgr:id="Customer1"
msdata:rowOrder="0" diffgr:hasChanges="modified"
CustomerID="ALFKI">
<CompanyName>Bottom Dollar Markets</CompanyName>
<ContactName>Antonio Moreno</ContactName>
</Customer>
</DataInstance>
<diffgr:before>
<Customer diffgr:id="Customer1"
msdata:rowOrder="0"
CustomerID="ALFKI">
<CompanyName>Alfreds Futterkiste</CompanyName>
<ContactName>Maria Anders</ContactName>
</Customer>
</diffgr:before>
</diffgr:diffgram>
</ROOT>
Il <blocco before> include un <elemento Customer> (diffgr:id="Customer1"). Il <blocco DataInstance> include l'elemento Customer> corrispondente< con lo stesso ID. L'elemento <customer in NewDataSet> specifica anche diffgr:hasChanges="modified".>< Indica un'operazione di aggiornamento e il record del cliente nella tabella Cust viene aggiornato di conseguenza. Si noti che se l'attributo diffgr:hasChanges non è specificato, la logica di elaborazione DiffGram ignora questo elemento e non vengono eseguiti aggiornamenti.
Per testare DiffGram
Creare queste tabelle nel database tempdb .
CREATE TABLE Cust( CustomerID nchar(5) Primary Key, CompanyName nvarchar(40) NOT NULL , ContactName nvarchar(60) NULL) GO CREATE TABLE Ord( OrderID int Primary Key, CustomerID nchar(5) Foreign Key REFERENCES Cust(CustomerID)) GOAggiungere questi dati di esempio:
INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ALFKI', N'Alfreds Futterkiste', N'Maria Anders') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANATR', N'Ana Trujillo Emparedados y helados', N'Ana Trujillo') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANTON', N'Antonio Moreno Taquer??a', N'Antonio Moreno') INSERT INTO Ord(OrderID, CustomerID) VALUES(1, N'ALFKI') INSERT INTO Ord(OrderID, CustomerID) VALUES(2, N'ANATR') INSERT INTO Ord(OrderID, CustomerID) VALUES(3, N'ANTON')Copiare il DiffGram sopra e incollarlo in un file di testo. Salvare il file come MyDiffGram.xml nella stessa cartella usata nel passaggio precedente.
Copiare il diffGramSchema fornito in precedenza in questo argomento e incollarlo in un file di testo. Salvare il file come DiffGramSchema.xml.
Creare e usare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire DiffGram.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
D. Inserimento, aggiornamento ed eliminazione di record tramite diffGram
In questo esempio viene usato un DiffGram relativamente complesso per eseguire operazioni di inserimento, aggiornamento ed eliminazione.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:mapping-schema="DiffGramSchema.xml">
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DataInstance>
<Customer diffgr:id="Customer2" msdata:rowOrder="1"
diffgr:hasChanges="modified"
CustomerID="ANATR">
<CompanyName>Bottom Dollar Markets</CompanyName>
<ContactName>Elizabeth Lincoln</ContactName>
<Order diffgr:id="Order2" msdata:rowOrder="1"
msdata:hiddenCustomerID="ANATR"
CustomerID="ANATR" OrderID="2"/>
</Customer>
<Customer diffgr:id="Customer3" msdata:rowOrder="2"
CustomerID="ANTON">
<CompanyName>Chop-suey Chinese</CompanyName>
<ContactName>Yang Wang</ContactName>
<Order diffgr:id="Order3" msdata:rowOrder="2"
msdata:hiddenCustomerID="ANTON"
CustomerID="ANTON" OrderID="3"/>
</Customer>
<Customer diffgr:id="Customer4" msdata:rowOrder="3"
diffgr:hasChanges="inserted"
CustomerID="AROUT">
<CompanyName>Around the Horn</CompanyName>
<ContactName>Thomas Hardy</ContactName>
<Order diffgr:id="Order4" msdata:rowOrder="3"
diffgr:hasChanges="inserted"
msdata:hiddenCustomerID="AROUT"
CustomerID="AROUT" OrderID="4"/>
</Customer>
</DataInstance>
<diffgr:before>
<Order diffgr:id="Order1" msdata:rowOrder="0"
msdata:hiddenCustomerID="ALFKI"
CustomerID="ALFKI" OrderID="1"/>
<Customer diffgr:id="Customer1" msdata:rowOrder="0"
CustomerID="ALFKI">
<CompanyName>Alfreds Futterkiste</CompanyName>
<ContactName>Maria Anders</ContactName>
</Customer>
<Customer diffgr:id="Customer2" msdata:rowOrder="1"
CustomerID="ANATR">
<CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
<ContactName>Ana Trujillo</ContactName>
</Customer>
</diffgr:before>
</diffgr:diffgram>
</ROOT>
La logica DiffGram elabora questo DiffGram come segue:
In base alla logica di elaborazione di DiffGram, tutti gli elementi di primo livello del <blocco vengono> mappati alle tabelle corrispondenti, come descritto nello schema di mapping.
Il <blocco before> ha un <elemento Order> (dffgr:id="Order1") e un <elemento Customer> (diffgr:id="Customer1") per il quale non esiste alcun elemento corrispondente nel <blocco DataInstance> (con lo stesso ID). Indica un'operazione di eliminazione e i record vengono eliminati dalle tabelle Cust e Ord.
Il <blocco before> ha un <elemento Customer> (diffgr:id="Customer2") per il quale è presente un elemento Customer> corrispondente< nel <blocco DataInstance> (con lo stesso ID). L'elemento nel <blocco DataInstance> specifica diffgr:hasChanges="modified". Si tratta di un'operazione di aggiornamento in cui per il cliente ANATR, le informazioni CompanyName e ContactName vengono aggiornate nella tabella Cust usando i valori specificati nel <blocco DataInstance> .
Il <blocco DataInstance> ha un <elemento Customer> (diffgr:id="Customer3") e un <elemento Order> (diffgr:id="Order3"). Nessuno di questi elementi specifica l'attributo diffgr:hasChanges . Di conseguenza, la logica di elaborazione DiffGram ignora questi elementi.
Il <blocco DataInstance> ha un <elemento Customer> (diffgr:id="Customer4") e un <elemento Order> (diffgr:id="Order4") per cui non sono presenti elementi corrispondenti nel <blocco precedente> . Questi elementi nel <blocco DataInstance> specificano diffgr:hasChanges="inserted". Pertanto, viene aggiunto un nuovo record nella tabella Cust e nella tabella Ord.
Per testare DiffGram
Creare le tabelle seguenti nel database tempdb .
CREATE TABLE Cust( CustomerID nchar(5) Primary Key, CompanyName nvarchar(40) NOT NULL , ContactName nvarchar(60) NULL) GO CREATE TABLE Ord( OrderID int Primary Key, CustomerID nchar(5) Foreign Key REFERENCES Cust(CustomerID)) GOAggiungere questi dati di esempio:
INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ALFKI', N'Alfreds Futterkiste', N'Maria Anders') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANATR', N'Ana Trujillo Emparedados y helados', N'Ana Trujillo') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANTON', N'Antonio Moreno Taquer??a', N'Antonio Moreno') INSERT INTO Ord(OrderID, CustomerID) VALUES(1, N'ALFKI') INSERT INTO Ord(OrderID, CustomerID) VALUES(2, N'ANATR') INSERT INTO Ord(OrderID, CustomerID) VALUES(3, N'ANTON')Copiare il DiffGram sopra e incollarlo in un file di testo. Salvare il file come MyDiffGram.xml nella stessa cartella usata nel passaggio precedente.
Copiare il diffGramSchema fornito in precedenza in questo argomento e incollarlo in un file di testo. Salvare il file come DiffGramSchema.xml.
Creare e usare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire DiffGram.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
E. Applicazione degli aggiornamenti tramite un DiffGram con l'annotazione diffgr:parentID
In questo esempio viene illustrato come viene usata l'annotazione parentID specificata nel <blocco prima> dell'oggetto DiffGram nell'applicazione degli aggiornamenti.
<NewDataSet />
<diffgr:before>
<Order diffgr:id="Order1" msdata:rowOrder="0" OrderID="2" />
<Order diffgr:id="Order3" msdata:rowOrder="2" OrderID="4" />
<OrderDetail diffgr:id="OrderDetail1"
diffgr:parentId="Order1"
msdata:rowOrder="0"
ProductID="13"
OrderID="2" />
<OrderDetail diffgr:id="OrderDetail3"
diffgr:parentId="Order3"
ProductID="77"
OrderID="4"/>
</diffgr:before>
</diffgr:diffgram>
Questo DiffGram specifica un'operazione di eliminazione perché è presente solo un <blocco prima> . In DiffGram l'annotazione parentID viene usata per specificare una relazione padre-figlio tra gli ordini e i dettagli dell'ordine. Quando SQLXML elimina i record, elimina i record dalla tabella figlio identificata da questa relazione e quindi elimina i record dalla tabella padre corrispondente.