====== 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; }