Udostępnij za pośrednictwem


Wykonywanie w formacie DiffGram przy użyciu SQLXML zarządzane klas

W tym przykładzie przedstawiono sposób wykonać pliku w formacie DiffGram, w Microsoft .Aktualizuje środowisko .NET Framework do zastosowania danych do SQL Server tabel przy użyciu klas zarządzanych SQLXML (Microsoft.Data.SqlXml).

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".Wskazuje to operacji aktualizacji i odpowiednio zaktualizowany rekord klienta w tabela Nabywca.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.

Oto kod C# samouczka aplikacją, która ilustruje sposób użycia klasy zarządzane SQLXML wykonać powyższych w formacie DiffGram i aktualizowanie utworzy także w dwóch tabelach (Cust nika) tempdb bazy danych.

using System;
using System.Data;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
   static string ConnString = "Provider=SQLOLEDB;Server=MyServer;database=tempdb;Integrated Security=SSPI;";
   public static int testParams()
   {
      SqlXmlAdapter ad;
      // Need a memory stream to hold diff gram temporarily
      MemoryStream ms = new MemoryStream();
      SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
      cmd.RootTag = "ROOT";
      cmd.CommandStream = new FileStream("MyDiffgram.xml", FileMode.Open, FileAccess.Read);
      cmd.CommandType = SqlXmlCommandType.DiffGram;
      cmd.SchemaPath = "DiffGramSchema.xml";
      // Load data set
      DataSet ds = new DataSet();
      ad = new SqlXmlAdapter(cmd);
      ad.Fill(ds);
      ad.Update(ds);
      return 0;
   }
   public static int Main(String[] args)
   {
      testParams();
      return 0;
   }
}

Aby przetestować aplikację

  1. Upewnij się, że.NET Framework jest zainstalowana na komputerze.

  2. Zapisać następującego schematu XSD (DiffGramSchema.xml) w folderze:

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

  6. Zapisz kod C# (DiffgramSample.cs) dostarczonego powyżej w tym samym folderze, w którym DiffGramSchema.xml i MyDiffGram.xml były przechowywane w poprzednich krokach.

    Ostrzeżenie

    Trzeba będzie zaktualizować nazwę SQL Server instancji w połączeniu z ciąg z "MyServer' rzeczywistą nazwę wystąpienie zainstalowanego programu SQL Server.

    Jeśli pliki są przechowywane w innym folderze, należy edytować kod i określ ścieżka katalogu właściwe dla mapowania schematu.

  7. Skompiluj kod.Aby skompilować kod w wiersz polecenia, należy użyć zapisu:

    csc /reference:Microsoft.Data.SqlXML.dll DiffgramSample.cs
    

    Tworzy plik wykonywalny (DiffgramSample.exe).

  8. W wiersz polecenia wykonać DiffgramSample.exe.