====== DataSet クラス (System.Data) ======
===== XMLの読み込み/書き込み =====
[C#]
// 読み込み対象ファイルパス
string fileName = @"c:\xmlDataSet.xml";
// XMLファイルの読み込み
xmlDataSet.ReadXml(fileName);
[C#]
// 書き込み対象ファイルパス
string fileName = @"c:\xmlDataSet.xml";
// XMLファイルの書き込み
xmlDataSet.WriteXml(fileName);
===== 未知のXML形式から型付データセット用にXSDを生成 =====
[C#]
// 未知のXML形式ファイルパス
string xmlFileName = @"c:\xmlDataSet.xml";
// XSDファイルパス
string xsdFileName = @"c:\xmlDataSet.xsd";
// XMLファイルの読み込み
xmlDataSet.ReadXml(xmlFileName );
// XSDファイルの書き込み
xmlDataSet.WriteXmlSchema(xsdFileName);
XSDファイルは Visual Studio にドラッグアンドドロップすることで型付データセットを生成できる。\\
また、型付データセット内の余分な DataTable を削除して、型付データセットを利用して ReadXml() を行うことで、余分なテーブルデータをスキップしてXMLファイルを読み込むことができる。
===== DataTableのソート =====
DataTableのソートは、DataViewのSort機能を利用して行うことができる。しかし、型付DataSetの場合は、DataViewによってソートを行いToTable()メソッドで結果を得ようとすると、ToTable()メソッドはDataTable型を返却するため、ソートを行った以降の処理で型付DataSetによって自動生成されたコードの恩恵を受けられなくなってしまう。\\
\\
ここでは、ジェネリックメソッドを実装して、型付DataSetのDataTableを型付のままソートする方法を紹介する。\\
\\
[VB]
Imports System
Imports System.Data
Module SampleAppVB
Public Function SortTable(Of T As DataTable)( _
ByVal source As T, ByVal expression As String) As T
' データテーブルのコピーを作成
Dim dest As T = CType(source.Clone(), T)
' ソートされたデータビューの作成
Dim dv As DataView = New DataView(source)
dv.Sort = expression
' ソートされたレコードのコピー
For Each drv As DataRowView In dv
dest.ImportRow(drv.Row)
Next
Return dest
End Function
End Module
[C#]
using System;
using System.Data;
namespace SampleApplicationCS
{
public class SampleAppCS
{
public static T SortTable(T source, string expression)
where T : System.Data.DataTable
{
// データテーブルのコピーを作成
T dest = (T)source.Clone();
// ソートされたデータビューの作成
DataView dv = new DataView(source);
dv.Sort = expression;
// ソートされたレコードのコピー
foreach (DataRowView drv in dv)
{
dest.ImportRow(drv.Row);
}
return dest;
}
}
}
[C++]
using namespace System;
using namespace System::Data;
generic where T: System::Data::DataTable
T SortTable(T source, String^ expression)
{
// データテーブルのコピーを作成
T dest = (T)source->Clone();
// ソートされたデータビューの作成
DataView^ dv = gcnew DataView(source);
dv->Sort = expression;
// ソートされたレコードのコピー
for each (DataRowView^ drv in dv)
{
dest->ImportRow(drv->Row);
}
return dest;
}