Udostępnij za pośrednictwem


Przykłady w formacie DiffGram (SQLXML 4.0)

Przykłady w tym temacie składają się z DataSets, które wykonują insert, update i operacji usuwania do bazy danych.Przed użyciem przykłady, Uwaga:

  • W przykładach wykorzystano dwie tabele (Cust i nika), które muszą zostać utworzone, jeśli chcesz przetestować przykłady w formacie DiffGram:

    Cust(CustomerID, CompanyName, ContactName)
    Ord(OrderID, CustomerID)
    
  • Większość przykładów w tym temacie, użyj 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 jako DiffGramSchema.xml w tym samym folderze, w którym zapisać inne pliki używane w przykładach.

A.Usuwanie rekordu przy użyciu formacie DiffGram.

W tym przykładzie w formacie DiffGram usuwa klienta (IDklienta, którego jest ALFKI) rekordu z tabela Nabywca i usuwa odpowiedni rekord zamówienia (którego IDZamówienia jest 1) z tabela nika.

<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> blok, jest <zamówienia> elementu (diffgr:id = "order1") i <klienta> elementu (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).Wskazuje operacji usuwania.

Aby przetestować w formacie DiffGram

  1. 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))
    GO
    
  2. Dodać przykładowe dane:

    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')
    
  3. Powyżej formacie DiffGram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, w poprzednim kroku.

  4. Skopiuj DiffGramSchema przedstawionych we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.

  5. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać w formacie DiffGram.

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

B.Wstawienie rekordu przy użyciu formacie DiffGram.

W tym przykładzie w formacie DiffGram rekordu w tabela Nabywca i wstawia rekordu w tabela nika.

<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 formacie DiffGram <przed> nie jest określony blok (nie istniejące rekordy bazy danych zidentyfikowane).Istnieją dwa wystąpienia rekordu (identyfikowanego przez <klienta> i <zamówienia> elementów w <DataInstance> blok), są mapowane do tabel Nabywca i nika odpowiednio.Obydwa te elementy określają diffgr:hasChanges atrybut (hasChanges = "dodaje się").Wskazuje operację wstawiania.W tym formacie DiffGram, jeśli określisz hasChanges = "zmodyfikowane", są wskazujące chcesz zmodyfikować rekordu, który nie istnieje, które wyniki w błąd.

Aby przetestować w formacie DiffGram

  1. 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))
    GO
    
  2. Dodać przykładowe dane:

    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')
    
  3. Powyżej formacie DiffGram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, w poprzednim kroku.

  4. Skopiuj DiffGramSchema przedstawionych we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.

  5. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać w formacie DiffGram.

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

C.Aktualizowanie istniejącego rekordu przy użyciu formacie DiffGram.

W tym przykładzie w formacie DiffGram aktualizuje informacje o kliencie (NazwaFirmy i przedstawiciel) 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>

<Przed> zawiera blok <klienta> elementu (diffgr:id = "customer1").<DataInstance> blok zawiera odpowiednie <klienta> element z tym samym identyfikatora.<Klienta> element <NewDataSet> określa również diffgr:hasChanges = "zmodyfikowane".Oznacza to operacji aktualizacji i rekord klienta w Cust tabela zostanie odpowiednio zaktualizowany.Należy zauważyć, że jeśli diffgr:hasChanges atrybut nie jest określony, logiki przetwarzania w formacie DiffGram ignoruje ten element, a aktualizacje nie są wykonywane.

Aby przetestować w formacie DiffGram

  1. 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))
    GO
    
  2. Dodać przykładowe dane:

    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')
    
  3. Powyżej formacie DiffGram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, w poprzednim kroku.

  4. Skopiuj DiffGramSchema przedstawionych we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.

  5. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać w formacie DiffGram.

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

D.Wstawianie, aktualizowanie i usuwanie rekordów przy użyciu formacie DiffGram.

W tym przykładzie stosunkowo złożonego w formacie DiffGram jest używana do wykonywania 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 następująco:

  • Zgodnie z logiki przetwarzania w formacie DiffGram, elementów najwyższego poziom w <przed> blok mapować 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).Wskazuje operację usunięcia i rekordy są usuwane z tabeli Nabywca i nika.

  • 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 = "zmodyfikowane".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 logiki przetwarzania w formacie DiffGram ignoruje te elementy.

  • <DataInstance> Blok ma <klienta> elementu (diffgr:id = "customer4") i <zamówienia> elementu (diffgr:id = "order4") dla nie które ma odpowiednich elementów w <przed> bloku.Elementy te w <DataInstance> określić blok diffgr:hasChanges = "dodaje się".Dlatego dodaje się nowy rekord w tabela Nabywca i w tabela nika.

Aby przetestować w formacie DiffGram

  1. 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))
    GO
    
  2. Dodać przykładowe dane:

    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')
    
  3. Powyżej formacie DiffGram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako MyDiffGram.xml w tym samym folderze, w poprzednim kroku.

  4. Skopiuj DiffGramSchema przedstawionych we wcześniejszej części tego tematu i wkleić go do pliku tekstowego.Zapisz plik jako DiffGramSchema.xml.

  5. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać w formacie DiffGram.

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

E.Stosowanie aktualizacji przy użyciu formacie DiffGram adnotację diffgr:parentID

Ten przykład ilustruje sposób parentID adnotacji, określona w <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 jest używana do określania relacji nadrzędny podrzędność między zamówienia i szczegóły zamówienia.SQLXML usuwa rekordy, usuwa rekordy z podrzędność tabela, która jest identyfikowany przez tę relację, a następnie usuwa rekordy z tabela nadrzędnej.