DataSetとXMLの連携

 DataSetクラスにはXMLファイルとやり取りをするためのメソッドが用意されています。WriteXmlメソッドを使ってXMLファイルに書き出したり、ReadXmlメソッドを使ってXMLファイルから読み込んだりすることができます。また、スキーマ情報のみの読み書きもできます。

■ XMLファイルに出力

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 WriteXmlTest

サンプルダウンロード

○ 作成の準備

 「DataSetTest1」プロジェクトを修正して作成しましょう。DataSetTest1フォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドを次のように記述してください。

Module1.vb

  1. Sub Main()
  2.  '接続文字列
  3.  Dim constr As String = "Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Work\Books.mdf;Integrated Security=True;Connect Timeout=30"
  4.  'SqlConnectionオブジェクトを生成
  5.  Dim con As SqlConnection = New SqlConnection(constr)
  6.  'Usersテーブルのデータを取得するSQL文を作成
  7.  Dim sql As String = "SELECT * FROM Users"
  8.  'DataAdapterオブジェクトを生成
  9.  Dim da As New SqlDataAdapter(sql, con)
  10.  'DataSetオブジェクトを生成
  11.  Dim ds As New DataSet()
  12.  'DataSetとデータベースに同期させる
  13. da.Fill(ds)
  14.  'DataTableに名前を付ける
  15.  ds.Tables(0).TableName = "Users"
  16.  'データセットの情報をXMLファイルに出力する
  17.  ds.WriteXml("C:\Work\Books.xml")
  18.  Console.WriteLine("出力しました。")
  19.  Console.ReadLine()
  20. End Sub

○ 実行結果

出力しました

C:¥Work¥Books.xml

 <?xml version="1.0" standalone="yes"?>
 <NewDataSet>
  <Users>
   <Id>1</Id>
   <UserName>sato</UserName>
   <Password>csharp</Password>
   <Name>佐藤</Name>
  </Users>
  <Users>
   <Id>2</Id>
   <UserName>suzuki</UserName>
   <Password>spass</Password>
   <Name>鈴木</Name>
  </Users>
  <Users>
   <Id>3</Id>
   <UserName>takahashi</UserName>
   <Password>tpass</Password>
   <Name>高橋</Name>
  </Users>
  <Users>
   <Id>4</Id>
   <UserName>tanaka</UserName>
   <Password>tpass</Password>
   <Name>田中</Name>
  </Users>
  <Users>
   <Id>5</Id>
   <UserName>itou</UserName>
   <Password>ipass</Password>
   <Name>伊藤</Name>
  </Users>
  <Users>
   <Id>6</Id>
   <UserName>yamamoto</UserName>
   <Password>ypass</Password>
   <Name>山本</Name>
  </Users>
 </NewDataSet>

○ 解説

 25行目では、DataSetオブジェクト内のDataTableに名前を付けています。このようにDataTableに名前を付けることで、出力するファイルが見やすくなります。Xmlファイルを見ると、<Users>タグで囲まれていることがわかります。28行目でDataSetオブジェクトのWriteXmlメソッドを使って、XMLファイルにデータを出力しています。引数に指定したパスでファイルが作られます。

■ XMLファイルから入力

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 ReadXmlTest

サンプルダウンロード

○ 作成の準備

 「DataSetTest1」プロジェクトを修正して作成しましょう。DataSetTest1フォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドを次のように記述してください。

Module1.vb

  1. Sub Main()
  2.  'DataSetオブジェクト生成
  3.  Dim ds As New DataSet()
  4.  'XMLファイルからデータを読み込む
  5.  ds.ReadXml("C:\Work\Books.xml")
  6.  'データを表示する
  7.  Console.WriteLine("ID : ユーザー名 : パスワード : 名前")
  8.  For Each dr As DataRow In ds.Tables(0).Rows
  9.   Console.WriteLine("{0} : {1} : {2} : {3}", dr("Id"), dr("UserName"), dr("Password"), dr("Name"))
  10.  Next
  11.  Console.ReadLine()
  12. End Sub

○ 実行の準備

 次のようにXMLファイルに追加してください。

C:¥Work¥Books.xml

 <?xml version="1.0" standalone="yes"?>
 <NewDataSet>
  <Users>
   <Id>1</Id>
   <UserName>sato</UserName>
   <Password>csharp</Password>
   <Name>佐藤</Name>
  </Users>
  <Users>
   <Id>2</Id>
   <UserName>suzuki</UserName>
   <Password>spass</Password>
   <Name>鈴木</Name>
  </Users>
  <Users>
   <Id>3</Id>
   <UserName>takahashi</UserName>
   <Password>tpass</Password>
   <Name>高橋</Name>
  </Users>
  <Users>
   <Id>4</Id>
   <UserName>tanaka</UserName>
   <Password>tpass</Password>
   <Name>田中</Name>
  </Users>
  <Users>
   <Id>5</Id>
   <UserName>itou</UserName>
   <Password>ipass</Password>
   <Name>伊藤</Name>
  </Users>
  <Users>
   <Id>6</Id>
   <UserName>yamamoto</UserName>
   <Password>ypass</Password>
   <Name>山本</Name>
  </Users>
  <Users>
   <Id>7</Id>
   <UserName>nakamura</UserName>
   <Password>npass</Password>
   <Name>中村</Name>
  </Users>

 </NewDataSet>

○ 実行結果

ID : ユーザー名 : パスワード : 名前
1 : sato : csharp : 佐藤
2 : suzuki : spass : 鈴木
3 : takahashi : tpass : 高橋
4 : tanaka : tpass : 田中
5 : itou : ipass : 伊藤
6 : yamamoto : ypass : 山本
7 : nakamura : npass : 中村

○ 解説

 8行目では、DataSetオブジェクトのReadXmlメソッドを使って、XMLファイルのデータを入力しています。引数に指定したパスでファイルが読み込まれます。12~14行目で、DataSetオブジェクトの内のDataTableオブジェクトのデータをループして表示しています。実行の準備でXMLファイルにデータを追加したので、実行結果に追加したデータも表示されます。

前へ