DataSetとXMLの連携
DataSetクラスにはXMLファイルとやり取りをするためのメソッドが用意されています。WriteXmlメソッドを使ってXMLファイルに書き出したり、ReadXmlメソッドを使ってXMLファイルから読み込んだりすることができます。また、スキーマ情報のみの読み書きもできます。
■ XMLファイルに出力
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
コンソール アプリケーション |
プロジェクト名 |
WriteXmlTest |
サンプルダウンロード
○ 作成の準備
「DataSetTest1」プロジェクトを修正して作成しましょう。DataSetTest1フォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。
○ プログラム
Mainメソッドを次のように記述してください。
Program.cs
- static void Main(string[] args)
- {
- //接続文字列
- string constr = @"Data Source=(LocalDB)¥v11.0;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30";
- //SqlConnectionオブジェクトを生成
- SqlConnection con = new SqlConnection(constr);
- //Usersテーブルのデータを取得するSQL文を作成
- string sql = "SELECT * FROM Users";
- //DataAdapterオブジェクトを生成
- SqlDataAdapter da = new SqlDataAdapter(sql, con);
- //DataSetオブジェクトを生成
- DataSet ds = new DataSet();
- //DataSetとデータベースに同期させる
- da.Fill(ds);
- //DataTableに名前を付ける
- ds.Tables[0].TableName = "Users";
- //データセットの情報をXMLファイルに出力する
- ds.WriteXml(@"C:¥Work¥Books.xml");
- Console.WriteLine("出力しました。");
- Console.ReadLine();
- }
- }
○ 実行結果
出力しました
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
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Data;
- namespace ReadXmlTest
- {
- class Program
- {
- static void Main(string[] args)
- {
- //DataSetオブジェクト生成
- DataSet ds = new DataSet();
- //XMLファイルからデータを読み込む
- ds.ReadXml(@"C:¥Work¥Books.xml");
- //データを表示する
- Console.WriteLine("ID : ユーザー名 : パスワード : 名前");
- foreach (DataRow dr in ds.Tables[0].Rows)
- {
- Console.WriteLine("{0} : {1} : {2} : {3}", dr["Id"], dr["UserName"], dr["Password"], dr["Name"]);
- }
- Console.ReadLine();
- }
- }
- }
○ 実行の準備
次のように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ファイルにデータを追加したので、実行結果に追加したデータも表示されます。
前へ 次へ