Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > ステップ 7 > .NET アプリケーションの実装 基本知識編(Visual Studio 2005 / .NET Framework 2.0 対応版)  > XML を利用した DataSet の永続化

ステップ 7 ハンズオン : XML を利用した DataSet の永続化

マイクロソフト株式会社 デベロッパーマーケティング本部
デベロッパーエバンジェリスト 辻郷 隆史

最終更新日 2006 年 11 月 6 日

目標 XML を利用した DataSet の永続化
使用技術
  • ADO.NET
  • Visual Basic .NET 2005 / Windows フォーム
取り上げるトピックス
  • DataSet の永続化および復元方法
  • DataSet XML スキーマの永続化および復元方法
前提知識
関連記事

DataSet データの永続化

DataSet の XML 関連機能を使用することにより、XML を利用した DataSet の永続化を行うことが可能です。
今回のサンプル アプリケーションでは、DataSet の XML 関連機能を含め、下記の 3 つの機能の実装を行います。

図 1. サンプル アプリケーション
図 1. サンプル アプリケーション

  1. データベースから DataSet へのデータ設定
  2. DataSet から XML ドキュメントへの永続化
  3. XML ドキュメントから DataSet への復元

Step 1 :

Visual Studio .NET 2005 を起動して、以下の設定で新規にプロジェクトを作成します。

プロジェクトの種類 プロジェクトテンプレート プロジェクト名
[Visual Basic プロジェクト] [Windows アプリケーション] DataSetToXmlApp

Step 2 :

アプリケーションのデザインを行います。
ツールボックスから、Button コントロールを 3 つ、DataGridView コントロールを 1 つ、フォーム上に配置し以下のようにプロパティを設定します。

図 2. アプリケーションのデザイン
図 2. アプリケーションのデザイン

コントロール ID プロパティ名 設定値
Button1 Text (1) データ設定
Button2 Text (2) 永続化
Button3 Text (3) 復元

Step 3 :

アプリケーションの処理を実装します。
フォーム ( Form1.vb) のコードを表示し、Form1 クラスのメンバーとして、DataSet を定義します。

Public Class Form1

   Private myDs As DataSet

End Class

Button1 / Click イベント ハンドラへ、DataSet へのデータ設定の処理を実装します。

Private Sub Button1_Click(…) Handles Button1.Click
        Dim myDa As System.Data.SqlClient.SqlDataAdapter
        Dim con As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;" + _
        " AttachDbFilename=C:\_Test\northwnd.mdf; Integrated Security=True")
        myDa = New System.Data.SqlClient.SqlDataAdapter( _
        "SELECT * FROM Products", con)
        Me.myDs = New DataSet
        myDa.Fill(Me.myDs, "Products")
        Me.DataGridView1.DataSource = Me.myDs
        Me.DataGridView1.DataMember = "Products"
End Sub

永続化を行うデータを DataSet に設定するために、ADO.NET / SqlDataAdapter クラスを使用し、SQL Server / Northwind よりサンプルデータを取得しています。
ADO.NET によるデータの取得につきましては、「 10 行でズバリ !! ADO.NET によるデータの取得 (VB) 」 をご参照ください。

Button2 / Click イベント ハンドラへ、永続化の処理を実装します。

Private Sub Button2_Click(…) Handles Button2.Click
    Me.myDs.WriteXml("myData.xml")          ' データの永続化
End Sub

ここでは、DataSet の WriteXml メソッドを使用し、myData.xml へ XML ドキュメントを永続化しています。

Button3 / Click イベント ハンドラへ、復元の処理を実装します。

Private Sub Button3_Click(…) Handles Button3.Click
    Me.myDs = New DataSet
    Me.myDs.ReadXml("myData.xml")           ' データの復元
    Me.DataGridView1.SetDataBinding(Me.myDs, "Products")
End Sub

ここでは、DataSet の ReadXml メソッドを使用し、myData.xml ファイルの XML ドキュメントを DataSet へ復元しています。


Step 4 :

以上で、実装は完了です。では実際にビルドしてアプリケーションを動かしてみましょう。[ビルト] メニューから [ソリューションのビルト] を実行してアプリケーションをビルトします。
問題がなければ、[Ctrl] キーを押しながら [F5] キーを押すか、[デバッグ] メニューの [デバッグなしで開始] をクリックします。


Step 5 :

アプリケーションにて 「 (1) データ設定 」 ボタンをクリックし、データが DataSet (DataGridView) へ設定されていることを確認します。 次に、「 (2) 永続化 」 ボタンをクリックし、DataSet を XML ドキュメントとして永続化します。
アプリケーションと同一フォルダ内に作成された XML ドキュメント myData.xml を Internet Explorer などで開き、DataSet のデータが XML ドキュメントとして永続化されていることを確認します。

図 3. 永続化された XML ドキュメント
図 3. 永続化された XML ドキュメント

更に、「 (3) 復元 」 ボタンをクリックし、XML ドキュメントを DataSet へ復元します。
データとしては、データベースからデータ取得を行った場合と同様のものが設定されますが、ProductID などの数値列のヘッダーをクリックした際のソート順が、数値としてではなく、文字列としてソートされ動作が異なります。

図 4. ソート順の違い
図 4. ソート順の違い

今回のアプリケーションでは、DataSet に関する明示的な型指定を行っていないため、XML ドキュメントの情報を元にデータ型などの型指定が実施されます。
ただし、XML ドキュメントには、各要素のデータ型などのスキーマに関する情報が存在しないため、全て String 型であると解釈し、このような実行結果となります。

この問題を解決するために、次のステップで XML スキーマの情報も併せて永続化することにします。


Step 6 :

Bunnon2 / Click イベント プロシージャを下記の通り修正します。

Private Sub Button2_Click(…) Handles Button2.Click
    Me.myDs.WriteXml("myData.xml", XmlWriteMode.WriteSchema)    ' データの永続化
End Sub

今回の修正では、永続化のため使用している WriteXml メソッドを呼び出す際に、XmlWriteMode.WriteSchema パラメータを追加で指定しています。
このパラメータを追加することにより、データを永続化する際に XML ドキュメントに加え、XML スキーマも同一ファイルへインラインで永続化することが可能となります。
なお、復元のために使用している ReadXml メソッドでは、デフォルトの動作として同一ファイル内に XML スキーマが存在していた場合は、それを利用してデータ型などの型指定を行います。

修正完了後、ビルドし実行します。


Step 7 :

再度、[(1) データ設定] [(2) 永続化] [(3) 復元] を実行してみます。 今度は、正しくデータ型が認識されているため、いずれも同様の動作となることが確認できます。
更に、myData.xml ファイルを確認すると XML ドキュメントの前方に、XML スキーマが存在していることが確認できます。

図 6. 永続化された XML スキーマおよび XML ドキュメント
図 6. 永続化された XML スキーマおよび XML ドキュメント

【個別ファイルへの XML スキーマの永続化】

XML ドキュメントのファイルとは別ファイルへ XML スキーマを永続化する場合は、下記の通り WriteXmlSchema / ReadXmlSchema を使用することにより可能となります。

Private Sub Button2_Click(…) Handles Button2.Click
    Me.myDs.WriteXmlSchema("mySchema.xml")
    Me.myDs.WriteXml("myData.xml")          ' データの永続化
End Sub

Private Sub Button3_Click(…) Handles Button3.Click
    Me.myDs = New DataSet
    Me.myDs.ReadXmlSchema("mySchema.xml")
    Me.myDs.ReadXml("myData.xml")           ' データの復元
    Me.DataGridView1.SetDataBinding(Me.myDs, "Products")
End Sub

まとめ

DataSet の XML 関連機能をを利用することにより、DataSet の永続化を行うことが可能です。
また、XML スキーマを永続化する必要がある場合も、インラインまたは個別ファイルとして永続化を行うこと可能です。

このように .NET Framework では、XML を利用した DataSet データの永続化を効率良く行うことが可能です。

参考資料

  • .NET Framework 開発者ガイド / XML と DataSet


Top of Page Top of Page

Microsoft