データの読み込み(SELECT文)
次にデータを読み込んでみましょう。
データの読み出し方法
//(1)キーが100のデータの読み込み
書籍 book = new 書籍(100);
//(2)条件による読み込み(名前列がC#入門のデータ)
書籍 book2 = new 書籍("名前","C#入門");
//(3)LoadByKeyメソッドによる読み込み
書籍 book3 = new 書籍();
book3.LoadByKey(100);
//(4)LoadByParamメソッドによる読み込み
書籍 book4 = new 書籍();
book4.LoadByParam("名前", "C#入門");
//(5)FetchByIDメソッドによる読み込み
書籍 book5 = 書籍.FetchByID(100);
データを読み込むには、(1)コンストラクタの引数にテーブルの主キー値を設定する方法、(2)コンストラクタに列名と値を設定して条件に合致するデータを取得する方法、(3)LoadByKeyメソッドを呼び出す方法、(4)LoadByParamメソッドを呼び出す方法、(5)静的メソッドのFetchByIDを呼び出す方法などがあります。どの方法でもSELECT文が実行され、データを読み込むことができます。
これ以外にも、IDataReader/DataTable/DataRowを引数にセットして読み込むLoadメソッドや、ポストデータのコントロールIDとプロパティ名をマッチングして読み込むLoadPostメソッド等もあります。
注意点として、これらのメソッドに該当するデータが存在しなくても、そのまま処理が継続されます。そのため例外は発生しません。同様に、複数レコードのデータが取得された場合も、キー値の一番小さいデータがオブジェクトに設定されるだけで例外は発生しません。
読み出したデータの操作
SELECTしたデータには、プロパティを使ってアクセスできます。 Nullを許容する数値/日付系のカラムはNullable型のプロパティになるため、その場合はValueプロパティを使用します。
読み出したデータへのアクセス
//キーが100のデータの読み込み
書籍 book = new 書籍(100);
//読み込んだ書籍データを表示
lblId.Text = book.Id.ToString();
lblName.Text = book.名前;
lblAuthor.Text = book.価格.Value.ToString("#,#");
lblDate.Text = book.発売日.Value.ToString("yyyy/MM/dd");
lblPublishId.Text = book.出版社ID.Value.ToString();
//デバッグ
Response.Output.WriteLine(book.Inspect());
なお、Inspectメソッドを呼び出すと、各プロパティの情報をHTMLの文字列として取得することができます。このメソッドはデバッグ時に役立ちます。
テーブルのリレーションについて
SubSonicではテーブル間のリレーションを解釈して、自動的にプロパティとメソッドを生成します。 サンプルDBの場合、書籍テーブルの「出版社ID」を外部キーとして、出版社テーブルにリレーション設定をしています。そのため、書籍クラスに「出版社」というプロパティが生成され、出版社クラスには「書籍Records」というメソッドが生成されています。
リレーション設定に沿ったデータの読み出し
//(1)書籍を出版している出版社データの表示
書籍 book = new 書籍(100);
lblPublishName.Text = book.出版社.名前;
lblPublishAddress.Text = book.出版社.住所;
//(2)出版社にひもづく書籍データ(複数件)の表示
出版社 pub = new 出版社(1);
GridView1.DataSource = pub.書籍Records();
GridView1.DataBind();
これらのプロパティまたはメソッドを呼び出すと、そのタイミングでSELECT文が実行されます。そのため、書籍クラスの出版社プロパティから、出版社の名前と住所を取得できます。逆に、出版社クラスの書籍Recordsメソッドから、その出版社が発行している書籍のコレクションを取り出すこともできます。