Przykłady w formacie DiffGram (SQLXML 4.0)
W przykładach w tym temacie składają się z DiffGrams wykonujące wstawiania, aktualizacji i operacji usuwania w bazie danych.Przed użyciem w przykładach należy pamiętać o następujących kwestiach:
W przykładach wykorzystano dwie tabele (Cust i zakupu), które muszą zostać utworzone, jeżeli ma być przetestowana w przykładach w formacie DiffGram:
Cust(CustomerID, CompanyName, ContactName) Ord(OrderID, CustomerID)Większość przykładów, w tym temacie należy użyć następującego schematu XSD:
<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>Zapisz ten schemat pod DiffGramSchema.xml w tym samym folderze, gdzie zapisujesz inne pliki używane w przykładach.
A.Usuwanie rekordu za pomocą element w formacie DiffGram
W tym przykładzie w formacie DiffGram usuwa klienta (IDklienta którego jest ALFKI) rekord z tabela Cust i usuwa odpowiedni rekord zamówienia (których identyfikator zamówienia jest 1) z tabela zakupu.
<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>
W <przed> blokowanie, jest <Zamówienia> element)diffgr:ID = "Order1") i <Odbiorcy> element)diffgr:ID = "Customer1").Elementy te reprezentują istniejące rekordy w bazie danych.The <DataInstance> element does not have the corresponding records (with the same diffgr:id).Oznacza to, operacji usuwania.
Aby przetestować w formacie DiffGram
Tworzenie tych tabel w tempdb bazy danych.
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)) GODodaj dane przykładowe to:
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')Skopiuj formacie DiffGram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, które są używane w poprzednim kroku.
Skopiuj DiffGramSchema, pod warunkiem, że we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.
Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonywania w formacie DiffGram.
Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.
B.Wstawianie rekordu za pomocą element w formacie DiffGram
W tym przykładzie w formacie DiffGram rekordu w tabela Cust i wstawia rekordu w tabela zakupu.
<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>
W tym w formacie DiffGram <przed> nie określono blok (nie istniejące rekordy bazy danych zidentyfikowany). Istnieją dwa wystąpienia rekordów (identyfikowanego przez <Odbiorcy> i <Zamówienia> elementy w <DataInstance> @@), mapowanie na tabelach Cust i zakupu, odpowiednio. Obydwa te elementy określają diffgr:hasChanges atrybut (hasChanges = "dodaje").Wskazuje operację wstawiania.W tym formacie DiffGram, jeśli określony hasChanges = "zmodyfikowany", które są wskazującą chcesz zmodyfikować rekordu, który nie istnieje, co powoduje wystąpienie błędu.
Aby przetestować w formacie DiffGram
Tworzenie tych tabel w tempdb bazy danych.
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)) GODodaj dane przykładowe to:
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')Skopiuj formacie DiffGram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, które są używane w poprzednim kroku.
Skopiuj DiffGramSchema, pod warunkiem, że we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.
Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonywania w formacie DiffGram.
Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.
C.Aktualizowanie istniejącego rekordu za pomocą element w formacie DiffGram
W tym przykładzie w formacie DiffGram aktualizuje informacje o klientach (NazwaFirmy i nazwa kontaktu) dla odbiorcy 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>
The <before> blok includes a <Customer> element (diffgr:id="Customer1").The <DataInstance> blok includes the corresponding <Customer> element with same id.The <customer> element in the <NewDataSet> also specifies diffgr:hasChanges="modified".Oznacza to, operacji aktualizacji i rekord klienta w Cust tabela zostanie odpowiednio zaktualizowany.Należy zauważyć, że jeśli diffgr:hasChanges nie jest określony, logiki przetwarzania w formacie DiffGram ignoruje ten element, a aktualizacje nie są wykonywane.
Aby przetestować w formacie DiffGram
Tworzenie tych tabel w tempdb bazy danych.
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)) GODodaj dane przykładowe to:
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')Skopiuj formacie DiffGram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, które są używane w poprzednim kroku.
Skopiuj DiffGramSchema, pod warunkiem, że we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.
Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonywania w formacie DiffGram.
Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.
D.Wstawianie, aktualizowanie i usuwanie rekordów przy użyciu element w formacie DiffGram
W tym przykładzie stosunkowo złożona w formacie DiffGram jest używana do wykonania wstawianie, aktualizowanie i usuwanie operacji.
<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>
Logika w formacie DiffGram przetwarza ten w formacie DiffGram w następujący sposób:
Zgodnie z logiką przetwarzania w formacie DiffGram, wszystkie elementy najwyższego poziom w <przed> zablokować mapy do odpowiednich tabel, zgodnie z opisem w schemacie mapowania.
The <before> block has an <Order> element (dffgr:id="Order1") and a <Customer> element (diffgr:id="Customer1") for which there is no corresponding element in the <DataInstance> block (with the same ID).Oznacza to, że operacji usunięcia i rekordy są usuwane z tabeli Cust i zakupu.
The <before> block has a <Customer> element (diffgr:id="Customer2") for which there is a corresponding <Customer> element in the <DataInstance> block (with the same ID).Element <DataInstance> Określa blok diffgr:hasChanges = "zmodyfikowany".This is an update operation in which for customer ANATR, the CompanyName and ContactName information is updated in the Cust table using values that are specified in the <DataInstance> block.
The <DataInstance> block has a <Customer> element (diffgr:id="Customer3") and an <Order> element (diffgr:id="Order3").Żadna z tych elementów określić diffgr:hasChanges atrybut. Dlatego też logiki przetwarzania w formacie DiffGram ignoruje tych elementów.
The <DataInstance> blok has a <Customer> element (diffgr:id="Customer4") and an <Order> element (diffgr:id="Order4") for which there are no corresponding elements in the <before> blok. Te elementy w <DataInstance> Określanie blok diffgr:hasChanges = "dodaje".W związku z tym dodaje się nowy rekord w tabela Cust, a w tabela zakupu.
Aby przetestować w formacie DiffGram
Utwórz następujące tabele w tempdb bazy danych.
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)) GODodaj dane przykładowe to:
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')Skopiuj formacie DiffGram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, które są używane w poprzednim kroku.
Skopiuj DiffGramSchema, pod warunkiem, że we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.
Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonywania w formacie DiffGram.
Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.
E.Stosowanie aktualizacji przy użyciu element w formacie DiffGram diffgr:parentID adnotacji
Ten przykład ilustruje sposób parentID Adnotacja określonej**<przed>** blok w formacie DiffGram jest używana w celu zastosowania aktualizacji.
<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>
This DiffGram specifies a delete operation because there is only a <before> block.W formacie DiffGram parentID adnotacji służy do określania relacji nadrzędny podrzędność między zamówienia i szczegóły zamówienia.Kiedy SQLXML usuwa rekordy, usuwa rekordy z tabela podrzędnej jest identyfikowany za pomocą tej relacji, a następnie usuwa rekordy z odpowiedniej tabela nadrzędnej.