atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • プログラミング図書館・本館
  • .NET
  • データテーブル

データテーブル

最終更新:2011年01月25日 05:13

atachi

- view
管理者のみ編集可
  • 使い方 [#e29fd504]
    • スキーマの作成 [#g98e616c]
  • DataTableからのデータ取得方法 [#bed19bb7]
    • データの抽出 [#y82fe2f0]
    • データの抽出(LINQ) [#dd09ccb8]
    • データの集計 [#g8c1647f]
  • DataTableの機能 [#u251e501]
    • ある状態からの変更点を取得する(トランザクション機能) [#qb08d21c]

.NET Frameworksバージョン1時代から実装されている、メモリ上で稼働する簡易的なオンメモリデータベースです。

  • MSDN DataTable

データテーブルを理解しうまく使えるかどうかが、アプリケーション設計において非常に重要な要素となります。
データテーブルにはレコードの追加位置や削除されたレコードを記録されるため、後からそれらの情報を引き出すことができます。
また、ビュー機能を使うことで、任意の条件だけを含んだデータセットを抽出することができます。

DataTableの欠点としては、テーブルのフィールドに型の概念を持ち込めないことです。
スキームの指定時に格納可能なデータの型を設定できますが、これはDataTable内でのみ使用される内部情報(検索や集計、ソートなどの操作で使われる)だけです。
あるレコードのフィールドへのアクセスにはフィールド名を文字列で指定する必要があるので、タイプミスの問題や取得したデータはすべてobject型であり、プログラマが自分で型を調べキャストしなければならない。

  • CSVファイルからDataTableを作成するチュートリアル

使い方

// DataTableを作成
//    - 強い型付けでカラムを定義
//    - FirstNameカラムはstring型
//    - LastNameカラムはstring型
//    - AgeカラムはInt32型
DataTable table = new DataTable();
table.Columns.Add("FirstName", typeof(string));
table.Columns.Add("LastName", typeof(string));
table.Columns.Add("Age", typeof(Int32));
 
// レコードの追加
 
//    - DataRowを使った方法
DataRow row;
row = table.NewRow();
row["FirstName"] = "山田";
row["LastName"] = "太郎";
row["Age"] = 20;
 
//    - DataTable.Rowsにobject[]型でレコードを追加
table.Rows.Add(new object[] {"佐藤","健",23});
 
 
// レコードの参照
DataRow frow = table[0];
string firstName = table[0]["FirstName"]; // 同じ
firstName = frow["FirstName"];            // 
 
// レコードの走査
foreach(DataRow crow in table.Rows) {
	// DataRowを使ってすべての行に対して処理
}
 
// フィルタリング(DataViewの使用)
DataView view = table.DefaultView;
view.RowFilter = "Age > 18"; // Ageフィールドの値が18以上のものだけを表示
 
for(int i=0;i<view.Count;i++){
	DataRow row = view[i];
}

スキーマの作成

DataColumnを定義することで、DataTableにデータ構造のスキーマを定義します。
スキーマを与えると、正しくない値を含んだレコードをDataTableに追加した時にエラーの検出ができます。

  • DataColumnのプロパティ

DataTypeプロパティはカラムが格納することができる型を指定します。 DataColumn.DataTypeを指定することで強い型付けされたDataTableを作成することができます。
ただし、プログラマが作成した独自の型は指定することはできません。

ReadOnlyプロパティ
レコードの追加時のみ値を設定することができ、以降は読み取り専用となります。
AutoIncrementプロパティ
DataTypeがint型の場合に、レコードが追加されるたびに「0」から インクリメントされた値を自動的に格納していきます。 AutoIncrementSeed や AutoIncrementStep と併用することで インクリメントの開始値や加算値を調整できます。
DefaultValueプロパティ
カラムの初期値を設定します。
// カラムへスキームを設定するコード例
//     - Decimal型
//     - Nullを許容しない
//     - コメントに「Price」
//     - カラム名は「Price」
//     - 値が未設定の場合は「25」とする
DataColumn column = new DataColumn(); 
column.DataType = System.Type.GetType("System.Decimal"); 
column.AllowDBNull = false; 
column.Caption = "Price"; 
column.ColumnName = "Price"; 
column.DefaultValue = 25;

DataTableからのデータ取得方法

  • DataTable.Rowsですべての行を走査する
  • DataTable.Selectを使用して特定の行を取得する
  • LINQを使用して特定の行を取得する(もっともオススメ)

データの抽出

DataTable table = new DataTable();
// ... tableの初期化
 
var rows = table.Select("Message = 'Test Message' OR FirstName like 'T%'","Message");

DataTable.Selectは遅いです。レコード数だけでなくフィールド数や各フィールドの型によって急激にパフォーマンスが悪くなることがあるので、使用する際はパフォーマンスを意識する必要があります。

データの抽出(LINQ)

C#3以降ではLINQを使用してDataTableやコレクションからデータを探すことができます。
パフォーマンスではLINQを使用する方法がもっとも早い(DataTable.Selectを使うよりも2倍以上早い)。

  • LINQ
DataTable table = new DataTable();
// ... tableの初期化
 
var rows = (
	from row in table.AsEnumerable()
	let column0 = row.Field<string>("Message")
	let column1 = row.Field<string>("FirstName")
	where column0 == "Test Message" || column1.StartsWith("T")
	orderby column0
	select row
).ToArray();

データの集計

DataTableを駆使してデータの集計を行った方法を下記サイトで紹介しています。

  • 3流プログラマのメモ書き

ただ、DataViewを使ったり、重複を削除した後に集計を自分で計算するなど、スマートでないというイメージがあります。

C#3以降ならばLINQを使ってうまくできるハズですが。

DataTableの機能

ある状態からの変更点を取得する(トランザクション機能)

AcceptChanged()を呼び出してからの変更点をDataTableは記録しています。
GetChanged()を使って変更点を取得できます。引数に指定したものによって、削除されたレコード・追加されたレコード・変更されたレコードなどを取得できます。

DataTable table = new DataTable();
// ... テーブルの初期化
 
table.AcceptChanges(); // ここから
 
// ... テーブルの処理
 
DataTable deleted = table.GetChanged(DataRowState.Deleted); // 削除されたレコードが含まれたテーブル
if( daleted != null ) {
	// 削除されたレコードに対する処理を行う
 
	// deleted.RejectChanges()を呼び出すことで、この操作を無効にすることもできる。
}
「データテーブル」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


プログラミング図書館・本館
記事メニュー

C#

  • 新機能
  • 言語文法
    • 型
    • 関数
    • クラス
    • 演算子
    • 構文
    • デリゲート
    • イベント
    • 例外処理
    • アトリビュート
    • 名前空間
    • ジェネリクス
  • リフレクション
  • LINQ

.NET Frameworks

  • 数値
  • 文字列
  • 日付時刻
  • オブジェクト
  • コレクション
  • ファイルシステム
  • スレッド
  • データテーブル
  • グラフィックス
  • デバッグ
    • ログ出力
    • ユニットテスト
  • ユーティリティ
  • ネットワーク
    • HTTP
  • デバイス
    • COMポート
  • EntityFrameworks
    • Code First Programming Model
  • デバイスドライバ
    • WinUSB

WPF

  • XAML
  • イベント
  • コマンド
  • スタイル
  • データバインディング
  • コンポーネント
  • グラフィックス
  • カスタムコンポーネント
    • 依存関係プロパティ

アプリケーション

  • 二重起動の防止
  • アンマネージドDLLの読み込み
  • 外部のアプリケーションを起動

VisualStudio

  • 拡張機能
  • カラー設定

ライブラリ

  • WPFToolkit
  • A Fast CSV Reader
  • AvalonDock

実装方法

  • ドラッグアンドドロップ
  • アプリケーション内のドラッグアンドドロップ
  • CSVからDataTable

minecraft

  • Bukkit
  • プラグイン
    • Permissions
    • SlowHealth
    • CookieMonster
    • iConomy
    • WorldGuard
    • Lockette
    • MyHome
    • BorderGuard

サイトについて

プロフィール/リンク/未分類

メモ/ゲーム/Stacks/Omoikane


更新履歴

取得中です。

ここを編集

記事メニュー2

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集

人気記事ランキング
  1. .NET/WinUSB
  2. WPF/コンポーネント/コントロール/テキストボックス/バリデーション
  3. WPF/コマンド
もっと見る
最近更新されたページ
  • 5035日前

    Bukkit
  • 5041日前

    トップページ
  • 5062日前

    メニュー
  • 5072日前

    WPF/グラフィックス
  • 5072日前

    .NET/グラフィックス
  • 5072日前

    .NET/グラフィックス/画像の書き込み
  • 5072日前

    .NET/グラフィックス/画像の読み込み
  • 5078日前

    .NET/コレクション
  • 5096日前

    .NET/WinUSB
  • 5131日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. .NET/WinUSB
  2. WPF/コンポーネント/コントロール/テキストボックス/バリデーション
  3. WPF/コマンド
もっと見る
最近更新されたページ
  • 5035日前

    Bukkit
  • 5041日前

    トップページ
  • 5062日前

    メニュー
  • 5072日前

    WPF/グラフィックス
  • 5072日前

    .NET/グラフィックス
  • 5072日前

    .NET/グラフィックス/画像の書き込み
  • 5072日前

    .NET/グラフィックス/画像の読み込み
  • 5078日前

    .NET/コレクション
  • 5096日前

    .NET/WinUSB
  • 5131日前

    BorderGuardプラグイン
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. AviUtl2のWiki
  7. Dark War Survival攻略
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. ヒカマーWiki
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. 初音ミク Wiki
  6. 発車メロディーwiki
  7. 検索してはいけない言葉 @ ウィキ
  8. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  9. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  10. オレカバトル アプリ版 @ ウィキ
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. ガンダム・エアリアル(改修型) - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  4. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  6. hantasma - ストグラ まとめ @ウィキ
  7. ミゲル・セルベート - アニヲタWiki(仮)
  8. 危険度7 - 検索してはいけない言葉 @ ウィキ
  9. ドンキーコング バナンザ - アニヲタWiki(仮)
  10. 豊和工業株式会社 - アニヲタWiki(仮)
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.