DataSetとXMLの連携

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

■ XMLファイルに出力

○ プロジェクト

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

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

サンプルダウンロード

○ 作成の準備

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

○ プログラム

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

Program.cs

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

○ 実行結果

出力しました

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>

○ 解説

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

■ XMLファイルから入力

○ プロジェクト

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

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

サンプルダウンロード

○ 作成の準備

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

○ プログラム

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

Program.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Data;
  7. namespace ReadXmlTest
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. //DataSetオブジェクト生成
  14. DataSet ds = new DataSet();
  15. //XMLファイルからデータを読み込む
  16. ds.ReadXml(@"C:¥Work¥Books.xml");
  17. //データを表示する
  18. Console.WriteLine("ID : ユーザー名 : パスワード : 名前");
  19. foreach (DataRow dr in ds.Tables[0].Rows)
  20. {
  21. Console.WriteLine("{0} : {1} : {2} : {3}", dr["Id"], dr["UserName"], dr["Password"], dr["Name"]);
  22. }
  23. Console.ReadLine();
  24. }
  25. }
  26. }

○ 実行の準備

 次のように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 : 中村

○ 解説

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

前へ   次へ