最終回 Visual Studio .NETを使ったデータベース・プログラミング:基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング―(3/5 ページ)
DBアクセスを行うWinアプリをVS.NETの支援機能をフル活用して作成。ステップ・バイ・ステップで学ぶADO.NETプログラミングの基礎。
クエリ・ビルダを使ったselect文の作成
クエリ・ビルダを起動すると最初に[テーブルの追加]ダイアログが開くので、select文の対象となるテーブルをクリックして追加し、ダイアログを閉じる。ここでは複数のテーブルを選択することもできる。
選択したテーブルの列項目がクエリ・ビルダ上部に表示されるので、データを取得したいカラムにマウスでチェックを入れていけば、それに合わせて中央に表示されている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文がデータアダプタ構成ウィザード中に表示される。
[次へ]ボタンをクリックしてinsert、update、delete文を生成する前に、[詳細オプション]クリックして開く[SQL生成の詳細オプション]ダイアログも確認しておこう。
更新・削除のための3つの詳細オプション
[SQL生成の詳細オプション]ダイアログでは3つのオプションが示される。デフォルトではすべてがオンになっている。
まず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文からなるデータベースへの問い合わせは「バッチ・クエリ」などと呼ばれる。
詳細オプションを決定して[次へ]ボタンをクリックすればデータアダプタ構成ウィザードの完了だ。最後にその処理内容が表示される。このうち「テーブル・マップ」については後述する。
select文以外の自動生成された3つのSQL文は、すぐあとで述べるように、生成されたコードを直接のぞいて見るか、データアダプタのプロパティから確認できる。もしselect文を変更する場合には、再度ウィザードを起動し、それらを作り直す必要がある。
データアダプタを作成するもっと簡単な方法
ここまではデータアダプタ構成ウィザードとクエリ・ビルダを使って詳細を設定しながらデータアダプタを作成してきたが、以上の作業を1回の手順で済ませてしまう方法もある。それはサーバ・エクスプローラからテーブルを選択し、それを直接フォーム上にドロップしてしまうやり方だ。
この方法では、3つの詳細オプションはすべてオン、使用されるselect文は単純にすべてのカラムを取得する、という設定内容のデータアダプタが出来上がる。
もう少し細かく、特定のカラムのみを選択するようなselect文を作成したい場合には、対象となるカラムをマウスで選択して([Ctrl]キーを押しながらクリックすれば複数選択可)、それをフォーム上にドロップすればよい。
Copyright© Digital Advantage Corp. All Rights Reserved.