連載
» 2004年02月28日 00時00分 公開

最終回 Visual Studio .NETを使ったデータベース・プログラミング基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング―(3/5 ページ)

[デジタルアドバンテージ,著]

クエリ・ビルダを使ったselect文の作成

 クエリ・ビルダを起動すると最初に[テーブルの追加]ダイアログが開くので、select文の対象となるテーブルをクリックして追加し、ダイアログを閉じる。ここでは複数のテーブルを選択することもできる。

[テーブルの追加]ダイアログ
select文の対象となるテーブルをクリックして追加し、[閉じる]ボタンでダイアログを閉じる。今回ではもちろんpublishersテーブルを選択する。

 選択したテーブルの列項目がクエリ・ビルダ上部に表示されるので、データを取得したいカラムにマウスでチェックを入れていけば、それに合わせて中央に表示されているselect文が再構築されていく。

select文を作成中のクエリ・ビルダ
クエリ・ビルダを使えば、簡単なselect文ならマウスの操作だけで作成できる。
  (1)データを取得したいカラムにチェックを入れれば、そのカラム名がselect文中(3)に挿入されていく。
  (2)ここではレコード取得時の抽出条件(select文のwhere句)や並べ替え(order by句)なども設定できる。
  (3)作成中のselect文。
  (4)作成したselect文を実際に実行した結果。

 マウスの右クリックで[実行]を選択すれば、作成中のselect文を実際に実行して、どのようなレコードが取得されるかも確認できる(3)

 ウィンドウ内2段目のスプレッド・シート(2)では、抽出条件を入力すればselect文のwhere句も作成できる。ここまではレコード数の少ないpublishersテーブルしか扱ってこなかったのでレコード取得時の抽出条件については触れていなかったが、レコード数が多いテーブルではselect文のwhere句は必須だ。

 本連載第4回の「データセットとは?」で解説したように、データセットとは、メモリ上に作られるデータベースのテーブルのコピーのようなものである。初めてこのことを耳にすると、大量のレコードを含んだテーブルの場合には、データセットが巨大になってしまうような気がするかもしれない。しかし、1つの処理あるいは1つの画面で実際にそれらすべてのレコードが一度に必要となることはめったにないはずだ。つまり、あらかじめデータセットに取得するレコードをselect文で絞り込んでおくことができる。データセット上でもレコードの絞り込みは可能だが、メモリやトラフィックの無駄な消費を避けるためも、クエリ・ビルダなどを使って最低限必要なレコードのみを取得するようにしなくてはならない。

 select文が完成したら、[OK]ボタンをクリックしてダイアログを閉じれば、いま作成したselect文がデータアダプタ構成ウィザード中に表示される。

データアダプタ構成ウィザード(5/6)
クエリ・ビルダで作成したselect文が設定されている。

 [次へ]ボタンをクリックしてinsert、update、delete文を生成する前に、[詳細オプション]クリックして開く[SQL生成の詳細オプション]ダイアログも確認しておこう。

更新・削除のための3つの詳細オプション

 [SQL生成の詳細オプション]ダイアログでは3つのオプションが示される。デフォルトではすべてがオンになっている。

[SQL生成の詳細オプション]ダイアログ
ここではinsert、update、delete文を生成するかどうかと、生成する場合に付加されるSQL文の項目を選択する。

 まず1つめのオプションは、いま作成したselect文からinsert、update、delete文を自動生成するかを指定するものだ。select文から自動生成されるこれら3つのSQL文については第5回の「データアダプタ構成ウィザードによるinsert文の自動生成」で解説している。SqlCommandBuilderクラスを使用したSQL文の自動生成ではプログラムの実行時にそれぞれのSQL文を作成するが、VS.NETではこのオプションがオンになっていると、それらをあらかじめ作成してコード中に埋め込むようになっている。もちろんデータの表示だけを行うような場合には、このオプションは必要ない。

 2番目のオプションはオプティミスティック同時実行制御のために、update文とdelete文に対して更新(削除)対象レコードがだれにも変更されていないかをチェックするwhere句を追加するかどうかを決めるオプションである。オプティミスティック同時実行制御については第6回の「楽観的なデータベース更新処理」で解説した。

 最後のオプション*2については今回対象としているpublishersテーブルには無関係なので取りあえず不要である(オンのままでも特に問題ない)。

*2 このオプションは、insert文やupdate文の実行に伴ってレコードの内容が変更するような場合に、その値をデータセットに書き戻すために使用される。例えばSQL Serverでは、テーブルのカラムが「ID列」として設定されていると、レコードの追加時にそのカラムに自動的に連番を設定する機能がある。このようなテーブルを扱う場合、このオプションをオンにしておくと、insert文のあとにID列を取得するためのselect文がセミコロン(;)で区切って追加される。この2つのSQL文はDBMSで連続して処理されるので、レコードの追加と生成された連番の取得が一度に行える。このため、その連番を別テーブルで使用するような場合には、処理をコンパクトに記述できる。なお、セミコロンで区切られた複数のSQL文からなるデータベースへの問い合わせは「バッチ・クエリ」などと呼ばれる。


 詳細オプションを決定して[次へ]ボタンをクリックすればデータアダプタ構成ウィザードの完了だ。最後にその処理内容が表示される。このうち「テーブル・マップ」については後述する。

データアダプタ構成ウィザード(6/6)
これはデータアダプタ構成ウィザードがデータアダプタ作成のためのコードを正常に生成できた場合の画面。もしSELECT文に不具合があると、ここでエラーが報告される。

 select文以外の自動生成された3つのSQL文は、すぐあとで述べるように、生成されたコードを直接のぞいて見るか、データアダプタのプロパティから確認できる。もしselect文を変更する場合には、再度ウィザードを起動し、それらを作り直す必要がある。

データアダプタを作成するもっと簡単な方法

 ここまではデータアダプタ構成ウィザードとクエリ・ビルダを使って詳細を設定しながらデータアダプタを作成してきたが、以上の作業を1回の手順で済ませてしまう方法もある。それはサーバ・エクスプローラからテーブルを選択し、それを直接フォーム上にドロップしてしまうやり方だ。

 この方法では、3つの詳細オプションはすべてオン、使用されるselect文は単純にすべてのカラムを取得する、という設定内容のデータアダプタが出来上がる。

 もう少し細かく、特定のカラムのみを選択するようなselect文を作成したい場合には、対象となるカラムをマウスで選択して([Ctrl]キーを押しながらクリックすれば複数選択可)、それをフォーム上にドロップすればよい。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。