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
|
|
|