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