パラメータを使う

 データベースからデータを利用する場合、いつも同じSQLステートメントを使えるわけではありません。状況によってユーザーが検索キーワードを入力し、それを元に抽出することもあります。その際、動的に条件を与える方法を利用することができます。それが、パラメータです。

 パラメータを利用するにはSQLステートメントの条件の部分で、「@パラメータ名」を割り当てておきます。

例:
  SELECT * FROM M_ユーザー WHERE ユーザーID=@user

 「@パラメータ名」に動的に値を入れて、そのときに応じたデータを抽出することができます。CommandクラスにはParametersコレクションがあります。そこには、Parameterオブジェクトが設定されます。作成される際にパラメータ名を指定してParametersコレクションにパラメータの値を追加していきます。

○ プロジェクト

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 ParameterTest

サンプルダウンロード

○ フォームデザイン

 次の図のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム

 「表示」ボタンをクリックしたときのイベントプロシージャの記述をしてください。

Form1.vb

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.  '接続文字列を作成する
  3.  Dim conString As String = _
  4.   "Data Source=.;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
  5.  'コネクションオブジェクトを生成する
  6.  Dim con As New SqlClient.SqlConnection(conString)
  7.  'SQL文を生成する
  8.  Dim sql As String = "SELECT * FROM M_ユーザー WHERE ユーザーID=@user"
  9.  'コマンドオブジェクトを作成する
  10.  Dim cmd As New SqlClient.SqlCommand(sql, con)
  11.  'パラメータを設定する
  12.  'cmd.Parameters.Add("@user", Me.TextBox1.Text)
  13.  cmd.Parameters.Add("@user", SqlDbType.NVarChar).Value = Me.TextBox1.Text
  14.  'オープンする
  15.  con.Open()
  16.  'コマンドを実行する
  17.  Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
  18.  '情報を表示してみる
  19.  dr.Read()
  20.  Me.TextBox2.Text = dr("ユーザーID") & " " & dr("ユーザー名") & _
  21.   " " & dr("パスワード") & " " & dr("氏名")
  22.  'クローズする
  23.  dr.Close()
  24. End Sub

○ 実行結果

実行結果
実行結果

 SQLステートメントの中に「@パラメータ名」のパラメータを指定しておきます。そして、@userというパラメータのオブジェクトを生成して、それをCommandオブジェクトのParametersコレクションに追加しました。あとは、そのコマンドを実行すればよいわけです。

 参考
  パラメータを設定する際に、サンプルのプログラムは.NET Framework1.xと互換性を保つために用意されているメソッドを指定しました。そのため、警告が表示されました。 .NET Framework2.0での記述は、以下のようになります。

 cmd.Parameters.Add(“ID”,Oledb.OledbType.VarChar, 5).Value = me.TextBox1.Text

前へ   次へ