最終回 Visual Studio .NETを使ったデータベース・プログラミング:基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング―(4/5 ページ)
DBアクセスを行うWinアプリをVS.NETの支援機能をフル活用して作成。ステップ・バイ・ステップで学ぶADO.NETプログラミングの基礎。
ウィザードが作成したコードの確認
データアダプタ構成ウィザードが完了したら「sqlDataAdapter1」と「sqlConnection1」の2つ項目がデザイナ画面の下部に作成されているはずだ。データアダプタ構成ウィザードは、データアダプタとともに、DBMSとの接続に必要なSqlConnectionオブジェクトも作ってくれるということである。
ウィザードにより生成したSQL文を変更したい場合には、「sqlDataAdapter1」を右クリックして再度データアダプタ構成ウィザードを開始して、SQL文を再構築するとよい。ただし、ウィザードに再表示されるselect文はそのままになっているが、詳細オプションがデフォルトの状態に戻っているので注意してほしい。
さて、この時点でVS.NETをコード画面に切り替えると、かなりの量のコードが生成されているのが分かる。デザイナ画面で生成したコードは最初は隠れているので、「Windowsフォーム デザイナで生成されたコード」という部分をマウスでクリックすれば、それを展開できる。
デザイナ画面でデータアダプタ構成ウィザードにより生成されたコード(一部)
デザイナ画面で生成したコードは最初隠れているので、「Windowsフォーム デザイナで生成されたコード」という部分をマウスでクリックすれば、それを展開できる。これは展開したあとの画面。
ここでのコードは、まずSqlDataAdapterクラス、4つのSqlCommandクラス、SqlConnectionクラスのそれぞれのインスタンスを生成し、各種プロパティを設定するというものだ。
細かなパラメータの違いはあるが(自動生成されたコードには、実行時のパフォーマンス向上のために知り得る限りの情報が静的に埋め込まれている)、本連載で解説した内容でほとんど読み進めることができるはずだ。途中、データアダプタのTableMappingsプロパティを設定している個所(上記画面では72行目)があるが、これはテーブル・マップのためのコードである(後述)。
コードの最初のコメントにあるようにこの部分は変更すべきでない。パラメータの微妙な修正は可能なようだが、修正を加えたとしてもデザイナ画面で変更があると追加したコードはあっさりと失われてしまう。
自動生成されたinsert文やupdate文を確認、修正する場合には、次で説明するようにVS.NETの[プロパティ]ウィンドウから行えばよい。
UpdateCommandプロパティのupdate文とパラメータ
ここでは例としてupdate文が設定されているはずのUpdateCommandプロパティを見てみよう。デザイナ画面下部に配置された「sqlDataAdapter1」を選択して[プロパティ]ウィンドウに注目すると次のようになっている。
VS.NETの[プロパティ]ウィンドウ
ここではデザイナ画面で「sqlDataAdapter1」を選択して、データアダプタが持っているプロパティの内容を表示している。ここでの内容の変更はすぐさま対応するコードに反映される。
上記の画面のようにUpdateCommandプロパティの項目を展開しCommandTextプロパティを見ると、自動生成されたupdate文が設定されているはずだ。この部分を選択すると右端に[...]ボタンが現れる。これをクリックするとupdate文を編集するためのクエリ・ビルダが表示され、必要であればそれを修正できる。
同時実行制御のための長いwhere句の内容ついても第6回の「楽観的なデータベース更新処理」で解説している。
@マークが付いているupdate文中のパラメータは第3回の「パラメータを利用したSQL文」で解説した「名前付きパラメータ」だ。各名前付きパラメータの内容はSqlParametersプロパティにSqlParameterオブジェクトのコレクションとして格納されており、この内容もGUIで確認、編集ができる。CommandTextプロパティのときと同様に、Parametersプロパティの部分を選択してから[...]ボタンをクリックすると、次のような「SqlParameterコレクション・エディタ」が開く。
名前付きパラメータにはDirectionというプロパティがあるが、これはストアド・プロシージャを利用するときに変更しなくてはいけない場合がある。
SourceColumnプロパティは第5回の「insert用SqlCommandオブジェクトの作成」で解説しているように、データセット内の対応するカラムを指定するためのものである。続くSourceVersionプロパティについてもすでに第6回の「DataRowオブジェクトの複数のバージョン」で解説済みだ。レコード取得時のデータがそのまま残っているかを確認するためのレコード取得時のデータは、SourceVersionプロパティの「Original」の方に保持されている。
Copyright© Digital Advantage Corp. All Rights Reserved.