データベースからデータを利用するとき、いつも同じSQL文を使えるわけではありません。状況によってユーザーが検索キーワードを入力し、それをもとにデータを抽出することもあります。その際、抽出するための条件をそのたびに設定しなくてはなりません。今までは次のようにSQL文に直接条件を指定しました。
string sql = “SELECT * FROM Users WHERE Id=” + iddata;
(変数iddataにユーザーが指定したIDが入っているとする)
そのほかにも条件を指定する方法があります。それがパラメータークエリです。パラメータークエリを利用するにはSQL文の条件の部分で、「@パラメーター名」を割り当てておきます。
※ OleDbCommandクラスおよびOdbcCommandクラスの場合は「?」を指定します。
後で「@パラメーター名」に値を入れることにより、その時に応じたデータを抽出することができます。CommandクラスにはParametersコレクションがあります。そこにParameterオブジェクトがセットされます。このコレクションのAddメソッドを使ってパラメーターの値を設定します。
○ プロジェクト
プロジェクトを作成して確認してみましょう。先回作成したCommandTestプロジェクトのプログラムをパラメータークエリに変更してみましょう。
プロジェクトの種類 | コンソール アプリケーション |
---|---|
プロジェクト名 | ParameterTest |
○ 作成の準備
「CommandTest」プロジェクトを修正して作成しましょう。CommandTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。
○ プログラム
Mainメソッドを次のように記述してください。
Program.cs
○ 実行結果
登録するユーザー情報を入力してください。
ID:6
ユーザー名:yamamoto
パスワード:ypass
氏名:山本
実行するSQL文:INSERT INTO Users VALUES(@id, @username, @password, @name)
変更のあった件数:1
○ 解説
33行目でパラメータークエリを作成しています。ID、ユーザー名、パスワード、氏名用のパラメーターを設定しています。それぞれのパラメーターに対して39~44行目でデータを設定しています。今回は3つの方法で指定しています。
1つ目の方法は、39、44行目のParametersコレクションのAddメソッドを使って、SqlParameterオブジェクトを生成する方法です。引数にパラメーター名、データベースのデータ型を指定します。SqlDbType列挙体にある一覧から選びます。その後続けてValueプロパティに、パラメーターに設定したい値を代入します。
2つ目の方法は、40行目でSqlParameterオブジェクトを生成しています。引数はParametersコレクションのAddメソッドと同じです。オブジェクトを生成してから41行目でValueプロパティに、パラメーターに設定したい値を代入しています。その後42行目にあるように、設定済みのSqlParameterオブジェクトをParametersコレクションのAddメソッドの引数に指定して追加しています。
3つ目の方法は、43行目のParametersコレクションのAddメソッドの引数でSqlParameterオブジェクトを生成して、その後、Valueプロパティにパラメーターに設定したい値を代入しています。