データベース千夜一夜第14回

プログラミングとSQL(2)
~レコードの削除処理
長谷川裕行
有限会社 手國堂

SqlConnectionとOleDbConnectionの違い(2)

SqlConnection~SqlCommandとOleDbConnenction~OleDbCommandは、扱う対象のデータベースが異なるだけで、基本部分はほとんど同じです。微妙な差異に注意すれば、混乱することはないでしょう。


- 実パラメータの設定 -

先に紹介した仮パラメータの設定方法を除けば、それ以降は基本的に同じ処理で構いません。

CommandTextに設定した仮パラメータの部分に実パラメータを設定するには、Command.ParametersのAddメソッドを使います。

  Parameters.Add(<パラメータ>)

Addメソッドの引数とするパラメータはParameterオブジェクトで、SqlCommandにはSqlParameter、OLE DBにはOleDbParameterと、それぞれの形式に対応したオブジェクトを、New演算子で以下のように生成します。

  New xxxParameters(<識別名>, <パラメータ形式>, サイズ)
  ※“xxx”の箇所には“SqlDb”あるいは“OleDb”などの接頭記号が入ります

個々の識別名はパラメータを判別するための名前で、SqlCommandの場合には先にCommandTextに設定したSQL文末尾の仮パラメータを設定します。OleDbCommandの場合は任意の文字列です。

パラメータ形式はパラメータのデータ型を示す値で、SqlCommandにはSqlDbType、OLE DBにはOleDbTypeオブジェクト(列挙体)のメンバを指定します(表1参照)。最終的には、データベース・エンジン内で表1に示している「内部での割当先」の型に変換されるのですが、SqlDbTypeとOleDbTypeでは同じ型でも名称の違うものや、同じ名称でも扱える範囲の異なるものがあります。注意しましょう。



- 基本構造は変わらない -

これらを総合すると、最終的SqlCommandとOleDbCommandのパラメータ追加部分は以下のようになります。

SqlCommandの場合
  objCommand.CommandText = strSql
  objCommand.Parameters.Add(New SqlDbParameter("@ItemId", SqlDbType.Char, 6))
OleDbCommandの場合
  objCommand.CommandText = strSql
  objCommand.Parameters.Add(New OleDbParameter("@ItemId", OleDbType.Char, 6))

Parameterオブジェクトの接頭記号が異なるだけで、本質的な部分はまったく変わっていません。


- 検索処理のサンプル -

その後、追加されたパラメータに対して、Valueプロパティに具体的な文字列(例では、テキストボックスに入力された商品IDの値)を設定します。

  objCommand.Parameters("@ItemId").Value = txtItemId.Text

ParametersはParameterオブジェクトの集合(コレクション)なので、()内にインデックス番号またはパラメータ名を示す文字列を引数として与えます。

このとき、SqlCommandでは最初に準備するSQLで与えた“@”付きの仮パラメータと、Addメソッドの引数とが対応します。

Parameterオブジェクトを用いた商品検索処理のソースコードを、SqlCommandとOleDbCommandに分けて示しておきます。




- パラメータ配列の追加 -

なお、ここではパラメータが1つだけの場合を例に説明しましたが、WHERE句の条件が多数にわたり複数のパラメータを設定しなければならない場合は、パラメータをParametersオブジェクト型の配列として宣言し、その要素(メンバ)をForループで1つずつ追加します。Parameters.Countプロパティにはパラメータ配列の要素数が入るので、先に配列名を引数にAddを実行し、ついで個々の要素を追加していきます。

  Dim i As Integer
  Dim ParaArray() As SqlParameters

  objCommand.Parameters.Add(ParamArray)
  For i = 0 To objCommand.Parameters.Count - 1
   objCommand.Parameters.Add(ParamArray(i))
  Next i



トップページ
SqlConnectionとOleDbConnectionの違い(1)
SqlConnectionとOleDbConnectionの違い(2)
実パラメータの設定
基本構造は変わらない
検索処理のサンプル
パラメータ配列の追加
テーブルを書き換えるSQLの実行
サンプルアプリケーションの仕様
サンプルアプリケーションの作成
あとがき
Copyright © MESCIUS inc. All rights reserved.