次の方法で共有


SQLXML マネージ クラスを使用した、DiffGram の実行

この例では、SQLXML マネージ クラス (Microsoft.Data.SqlXml) を使用して、Microsoft .NET Framework 環境で DiffGram ファイルを実行し、SQL Server テーブルにデータ更新を適用する方法を示します。

この例では、DiffGram で顧客 ALFKI の顧客情報 (CompanyName と ContactName) を更新します。

<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>

ここで、<before> ブロックには <Customer> 要素 (diffgr:id="Customer1") が含まれており、<DataInstance> ブロックには同じ id の、対応する <Customer> 要素が含まれています。また、<NewDataSet><customer> 要素には diffgr:hasChanges="modified" が指定されています。これは更新操作であることを示し、Cust テーブルの顧客レコードは指定に従って更新されます。diffgr:hasChanges 属性が指定されていない場合、DiffGram 処理ロジックではこの要素は無視され、更新は行われない点に注意してください。

次のコードは C# のチュートリアル アプリケーションです。このコードでは、SQLXML マネージ クラスを使用して上の DiffGram を実行し、2 つのテーブル (Cust、Ord) を更新する方法を示しています。これらのテーブルは、tempdb データベースに作成します。

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;
   }
}

アプリケーションをテストするには

この例をテストするには、コンピュータに .NET Framework がインストールされている必要があります。

  1. この XSD スキーマ (DiffGramSchema.xml) をフォルダに保存します。

    <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>
    
  2. 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))
    GO
    
  3. 次のサンプル データを追加します。

    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')
    
  4. 上の DiffGram をコピーして、テキスト ファイルに貼り付け、手順 1. と同じフォルダに MyDiffGram.xml として保存します。

  5. 上の C# コード (DiffgramSample.cs) を、上の手順で DiffGramSchema.xml と MyDiffGram.xml を保存したフォルダに保存します。

    ms171922.note(ja-jp,SQL.90).gifメモ :
    接続文字列の SQL Server インスタンスの名前は、'MyServer' の部分を、インストールされている SQL Server インスタンスの実際の名前に更新する必要があります。

    ファイルを別のフォルダに保存する場合は、コードを編集して、マッピング スキーマに対する適切なディレクトリ パスを指定する必要があります。

  6. コードをコンパイルします。コマンド プロンプトでコードをコンパイルするには、次を使用します。

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

    これにより、実行可能ファイル (DiffgramSample.exe) が作成されます。

  7. コマンド プロンプトで、DiffgramSample.exe を実行します。

参照

関連項目

DiffGram の例 (SQLXML 4.0)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手