差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| dotnet:dataset [2009/01/21 11:20] – nakayama | dotnet:dataset [2019/05/18 02:23] (現在) – 外部編集 非ログインユーザー | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== DataSet クラス (System.Data) ====== | ====== DataSet クラス (System.Data) ====== | ||
| + | ===== XMLの読み込み/ | ||
| + | [C#] | ||
| + | <code csharp> | ||
| + | // 読み込み対象ファイルパス | ||
| + | string fileName = @" | ||
| + | // XMLファイルの読み込み | ||
| + | xmlDataSet.ReadXml(fileName); | ||
| + | </ | ||
| + | |||
| + | [C#] | ||
| + | <code csharp> | ||
| + | // 書き込み対象ファイルパス | ||
| + | string fileName = @" | ||
| + | // XMLファイルの書き込み | ||
| + | xmlDataSet.WriteXml(fileName); | ||
| + | </ | ||
| + | |||
| + | ===== 未知のXML形式から型付データセット用にXSDを生成 ===== | ||
| + | [C#] | ||
| + | <code csharp> | ||
| + | // 未知のXML形式ファイルパス | ||
| + | string xmlFileName = @" | ||
| + | // XSDファイルパス | ||
| + | string xsdFileName = @" | ||
| + | // XMLファイルの読み込み | ||
| + | xmlDataSet.ReadXml(xmlFileName ); | ||
| + | // XSDファイルの書き込み | ||
| + | xmlDataSet.WriteXmlSchema(xsdFileName); | ||
| + | </ | ||
| + | XSDファイルは Visual Studio にドラッグアンドドロップすることで型付データセットを生成できる。\\ | ||
| + | また、型付データセット内の余分な DataTable を削除して、型付データセットを利用して ReadXml() を行うことで、余分なテーブルデータをスキップしてXMLファイルを読み込むことができる。 | ||
| + | |||
| ===== DataTableのソート ===== | ===== DataTableのソート ===== | ||
| + | DataTableのソートは、DataViewのSort機能を利用して行うことができる。しかし、型付DataSetの場合は、DataViewによってソートを行いToTable()メソッドで結果を得ようとすると、ToTable()メソッドはDataTable型を返却するため、ソートを行った以降の処理で型付DataSetによって自動生成されたコードの恩恵を受けられなくなってしまう。\\ | ||
| + | \\ | ||
| + | ここでは、ジェネリックメソッドを実装して、型付DataSetのDataTableを型付のままソートする方法を紹介する。\\ | ||
| + | \\ | ||
| + | [VB] | ||
| + | <code vbnet> | ||
| + | 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(), | ||
| + | |||
| + | ' ソートされたデータビューの作成 | ||
| + | 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#] | ||
| <code csharp> | <code csharp> | ||
| + | using System; | ||
| using System.Data; | using System.Data; | ||
| 行 29: | 行 92: | ||
| } | } | ||
| </ | </ | ||
| + | [C++] | ||
| + | <code cpp> | ||
| + | using namespace System; | ||
| + | using namespace System:: | ||
| + | |||
| + | generic< | ||
| + | T SortTable(T source, String^ expression) | ||
| + | { | ||
| + | // データテーブルのコピーを作成 | ||
| + | T dest = (T)source-> | ||
| + | |||
| + | // ソートされたデータビューの作成 | ||
| + | DataView^ dv = gcnew DataView(source); | ||
| + | dv-> | ||
| + | |||
| + | // ソートされたレコードのコピー | ||
| + | for each (DataRowView^ drv in dv) | ||
| + | { | ||
| + | dest-> | ||
| + | } | ||
| + | |||
| + | return dest; | ||
| + | } | ||
| + | </ | ||
| + | |||