日々をつらつらと

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

【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を活用します。

 

【随時更新】まとめる予定の項目一覧

しがない新人SEが少しでも知識を付けるために

色々な技術やら用語やらをまとめて個別記事にまとめたいと考えています。

 

その項目一覧の書き出し。

ぶっちゃけ自分用メモ。

 

続きを読む

【雑記】2017/04/14の所感

今日も今日とて自身の知識のなさに凹んでおります。

分からないものは分からないで仕方ないと思うけど、

for文を忘れてしまっていたのは致命的過ぎる。

こりゃあ、やばい、流石にやばい。

といっても覚えるには触るしか無いんで言語に触りまくりたいと思います。

 

で、日々をつらつらととかブログタイトルに書いてるけど、

平日はせっせと働くSEには日々の出来事なんか無いに等しいんですよねえ。

 

帰宅中落ち込む→勉強しなきゃ→本買う

 

って事はあったんですけどね。

本は買ったから読むというより必要に応じて読んでいきたい。

というか読むなら休日に読みます。

 

 

さて、話は変わりますが少し今後のブログ方針をどうすっかなあって考えまして。

こうして無駄に文章を書くのは好きだし、何やかんやで新しいことを学ぶのは嫌いじゃない。ただ、覚えが悪いだけ。

というわけで、疑問に思ったことを自分なりにまとめて記事にまとめたいと思います。

あくまで自分なりですがね。

 

ここ一週間でこれ覚えると良いと教わったもの、興味を覚えたこと、

これは覚えなきゃって思ったのを下に挙げてみます。

 

  • adaptere
    →DBのアーキテクチャ?の一つ。アプリ系の動作をまとめてるとか
  • シングルトン
    →上に同じ。こちらは設定系のコンストラクタを持っているとか
  • データトリブン
    →IT系の記事で見かけて興味を持ちました。
     ビッグデータマーケティング方法っぽい
  • mvcモデル
    →モデル、ビュー、コレクションというウェブアプリケーション
     概念(考え方)の一つ。
  • datatableクラス
    →表の形をしたデータの形

 

と、まあ、こんなところですかね。

データトリブン以外はどれも基本的なものです。

やっぱり頭がちょっと残念なんじゃないかな、自分……。

 

とりあえずここに挙げた項目はもう少し具体的に調べて個別記事にまとめます。

この記事を書いた後、これから書く予定記事みたいなのを作って

そこに追加→書いたら削除ってやっていけたらいいな。

 

明日明後日で一つか二つは記事にできるよう頑張ります。

 

今回はこんなところで。

ではでは。

【雑記】2017/04/13

まだまだ経験の浅いSEだけど、ここ数日、自分自身の知識の無さに落ち込んでいます。

いくら開発の経験がほとんどないとはいえ、これはちょっと酷いってレベル。

 

なので、まあ、ちょっと本腰入れて勉強しようと思います。

AtCoderってサイトを見つけたので暇なときはこいつでつらつらプログラムを組みたいと思います。

ここでも結果とかコードを書けたらいいですね。

 

あと今日の出来事といえば、Inoreaderってのに登録しました。

RSSは初めて使ったけどかなり便利ですね。

Yahooニュースとかもフィード取れればさらによかったんだけど、

そこはツイッターやらなんやらでカバー。

ニュースアカウントのTLだけを取得するアカウントを作ってもいいけど流石にそれはめんどくさい。

 

とりあえず今日は仕事できなくて凹んでいるので

強いお酒を飲みながらゲームして明日に備えます。

 

あと、永井するみの「欲しい」って本が読み終わったので

明日からはナイツ&マジックの7巻を読んでいきます。

チラッと読メで感想見たら王道で面白かったとあるので期待。

 

とまあ、こんな感じで日々記録できたらと思います。

ではでは

はじめに

はじめまして

 

仕事とか趣味の備忘録をつけたいと思って立ち上げました。

AtCoderとかにもチャレンジしていくつもりです。

 

なるべく書きたいとは思うけど恐らく更新は不定期になります。