差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
dotnet:dataset [2009/01/21 11:03] – 作成 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> | ||
- | public static T SortTable< | + | using System; |
+ | using System.Data; | ||
+ | |||
+ | namespace SampleApplicationCS | ||
+ | { | ||
+ | public class SampleAppCS | ||
+ | { | ||
+ | | ||
+ | | ||
+ | { | ||
+ | // データテーブルのコピーを作成 | ||
+ | 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++] | ||
+ | <code cpp> | ||
+ | using namespace System; | ||
+ | using namespace System:: | ||
+ | |||
+ | generic< | ||
+ | T SortTable(T source, String^ expression) | ||
{ | { | ||
// データテーブルのコピーを作成 | // データテーブルのコピーを作成 | ||
- | | + | T dest = (T)source->Clone(); |
// ソートされたデータビューの作成 | // ソートされたデータビューの作成 | ||
- | DataView dv = new DataView(source); | + | DataView^ dv = gcnew DataView(source); |
- | dv.Sort = expression; | + | dv->Sort = expression; |
// ソートされたレコードのコピー | // ソートされたレコードのコピー | ||
- | | + | |
{ | { | ||
- | | + | dest->ImportRow(drv->Row); |
} | } | ||
行 20: | 行 116: | ||
} | } | ||
</ | </ | ||
+ |