日々をつらつらと

仕事とか読書とかの備忘録

【C#】DataTableとは何ぞや?を自分なりにまとめてみた その1

DataTableってそもそもどんなものか分かる?
と、問われて焦った経験があります。
表データと答えたらつまり値を取り出すには?と問われました。
その時は答えられなかったので次は答えられるようにもDataTableについて
まとめてみました(あくまで自分が理解するためです)
 
※にわか知識ですので誤っている部分もあると思います。
 

 目次

 

そもそもDataTableとは?


MicrosoftのDataTableのページを見に行くとこんな風に書いてあります。

 

メモリ内データの 1 つのテーブルを表します。

 

 ……(´゚д゚`)?
どういうことなの……
 
とまあ、Microsoftの説明ページを見に行っても大半はこうなります。
Microsoftさんのページはメソッドの確認に使用して、
説明はあまり気にしない方が良い、というのが持論です。
 
さて話を戻しますと。
DataTableとは何ぞ?と聞かれたら、表(テーブル)形式のデータと認識しています。
 
配列が一列に並んだ状態でデータが格納されているなら、
こちらは表形式でデータを格納するためのものってことですね。
 
そして表であるということは、同じく表でデータを格納している
DBと相性がいいことになります。
DBからデータを取り出す時、表の形のまま取り出す時なんかは
このDataTableに格納してあげる、というイメージですね。
 
ちなみにDBとは何?そもそも表って?
という方は下の画像を見てください。これが表です。

f:id:ogayou213:20170416215928j:plain


 
ではDataTableが何なのかなんとなく理解できたところで
次はこのDataTableの使い方を見ていきましょう。

 

 DataTableを使って表を作る

1.DataTableを使う準備をする

DataTableを使って表を作るにはいくつか準備が必要です。
まずはDataTableを使う、つまり表形式のデータを使います、と
申告しないといけません。
 

// DataTable(表)を保存するDataSetを作成
DataSet dataset = new DataSet();
//「table」という表を作る宣言(作成)
DataTable table = new DataTable("tName");


 DataSetというのはテーブルを複数保存するためのものです。
簡単に言うとDataTableのセーブポイントです。
 
また上記ではtableという表を作ると書いてありますが、
正確には今後DataTableを使いたいならtableという5文字を使って呼び出す、
そのtableの名前はtNameである、ということです。
 
ブログに例えると、
table = はてなブログ
tName = ブログ名
といった感じです。

2.列を追加する

DataTableを使う準備ができました。
なのでここからは実際に表を作っていきます。
 
そして表を作るには列が必要です。
列とは縦の塊ということです。
 
またまたブログに例えると
列とはブログの記事に必要な要素の集まりです。
記事にはタイトル名、内容、カテゴリー、作成日時が必要ですね。
これら一つ一つが列です。
 
実際に列を追加するコードはこちら。

 

// 列を追加する
// id列はint型指定、date列はDtaeTime型指定
table.Columns.Add("id", Type.GetType("System.Int32"));
table.Columns.Add("title");
table.Columns.Add("content");
table.Columns.Add("date", Type.GetType("System.DateTime"));


 型指定をしたい場合はidとdateみたいにする必要があります。
ちなみに残りのtitleとcontentはデフォルトのstringになります。
この辺の型については説明すると長くなるので割愛。
知りたい方はググってください(^q^)
 

f:id:ogayou213:20170416223159j:plain


このコードを実行した時点だとこのような状態になっています。
これでようやく行(データ)を実際に追加できるようになります。

3.行を追加する

列が縦なら行は横です。
 
またまたブログで例えてみましょう。
記事名、内容、カテゴリー、作成日時が列としてあるとします。
 
最初の記事名という列には文字通り記事の名前が入ります。
今回の「【C#】DataTableとは何ぞや?を自分なりにまとめてみた」も記事名ですね。
 
次の内容はまさにここ。この文章。
DataTableを使うための説明文が入ります。
 
カテゴリーにはC#、プログラミング
といった分類が入ることになります。
 
作成日時は「【C#】DataTableとは何ぞや?を自分なりにまとめてみた」という記事が
作られた時間になります。
 
この4つが集まることで一つの行となります。
 
つまり列名とは行に入ったデータは何であるか
(記事名列に入ったデータは記事名である)を示し、
行はデータそのもの(記事名)を表すものです。
 
この行をC#で追加するには幾つか方法があります。
今回はその中でもオードックスな方法を採用しました。
 

DataRow dRow = table.NewRow();

 

// 一行目
// DataRowを使った方法
dRow["id"] = 1;
dRow["title"] = "first";
dRow["content"] = "一行目です。";
dRow["date"] = "2017/04/15";
dataset.Tables["tName"].Rows.Add(dRow);

 

// 二行目
// Rows.Addメソットを使った方法
table.Rows.Add(2, "second", "二行目です。", "2017/04/15");

 


 DataRowとかいうのが出てきましたね。
これはテーブルの<strong>行のみ</strong>を扱うクラスです。
なのでDataRowには列名がありません。
 
今回は
dRow["行名"] = "データ";
で「データ」は「行名」の値と指示してやり、
最後にAddメソッドを使ってテーブルに行を追加しています。
 
ちなみに今回ですと

table.Rows.Add(dRow);

でも問題ないのですが、あえてこうしました。
こういう書き方もある、という例です。
 
ちなみに今回の書き方をするには事前に

// DataSetに作ったテーブルを保存してあげるイメージ

dataset.Tables.Add(table);

と書いてあげないといけません。
最初のDataSetの宣言だけだとセーブデータを保存できる場所を
用意しただけですので、実際にセーブ(上記ソース)してやる必要があるのです。
 
書いた場所が書いた場所だったので乗せてないのですが、
列を追加した後にDataSetにtableを格納しています。
 
後でソースコードを全文乗せるのでそちらを参考にしてください。
 
 
さて、これでようやく表が完成しました。

f:id:ogayou213:20170416215928j:plain


 上の画像と同じ状態になったわけですね。
 
 
長くなってしまったので一旦ここで区切りたいと思います。
次はこのテーブルから値を取得するにはどうしたらいいかを
書いていきたいと思います。
 
次の更新まで少々お待ち下さい。
ではでは。

 

PS.はてな記法はめんどいんで次回からgithubを活用します。