|
| コントロール ID | プロパティ名 | 設定値 |
|---|---|---|
| Button1 | Text | (1) データ設定 |
| Button2 | Text | (2) 永続化 |
| Button3 | Text | (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 へ復元しています。

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

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

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

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

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 スキーマが存在していた場合は、それを利用してデータ型などの型指定を行います。
修正完了後、ビルドし実行します。

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

図 6. 永続化された 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 データの永続化を効率良く行うことが可能です。
Top of Page