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

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

SqlConnectionとOleDbConnectionの違い(1)

先に、前回紹介したデータベース操作の基本、Connectionオブジェクトについて補足しておきます。


- SqlConnectionとOleDbConnection -

前回は、商品データの検索処理を例に、SQL Serverとの接続に特化されたSqlConnectionによる接続を試しました。前回紹介したように、ConnectionオブジェクトにはSqlConnectionの他、各種データベースに合わせた「OracleConnection、OleDbConnection、OdbcConnection」が用意されています。

各クラスで定義されているオブジェクトには、対象となる接続手段の接頭語が付けられています。SQL Server用のSqlConnectionクラスなら「SqlConnection、SqlCommand、SqlDataReader」、OLE DB用のOleDbConnectionクラスなら「OleDbConnection、OleDbCommand、OleDbDataReader」……といった形です。

基本的な扱い方はどれも同じなのですが、それぞれ対象となるデータベース・エンジンに合わせて、微妙な差異を持っています。そこでまず前回の補足として、OLE DB用の接続について簡単に紹介します。

基本的なソースコードはどれも似たり寄ったり、というかほとんど同じなので、OracleやODBC接続に関してはあしからず割愛します。


- OleDbConnectionの利用 -

OLE DB用のクラスOleDbConnectionを利用するには、ソースの先頭で“System.Data.OleDb”ライブラリを取り込みます。

前回紹介したソースとの第一の相違点は、各オブジェクトの名称です。

  SqlConnection→OleDbConnection
  SqlCommand→OleDbCommand
  SqlDataReader→OleDbDataReader

フォームのデザインやフォーム上に配置したテキストボックスなどの名前(オブジェクト名)などについては、前回のコラムを参考にしてください。


- WHERE句と仮パラメータ -

さて、ここからは実際にデータベースを操作するCommandオブジェクトの差異になってきます。

前回紹介した検索処理は、フォーム上のテキストボックス“txtItemId”に「商品ID」が入力された段階で検索処理が実行される――という仕様でした。そのため、Commandオブジェクトに渡すSQL文字列は、予め作成しておいた文字列定数

  "SELECT 商品ID, 品名, 販売単価 FROM 商品_mr WHERE 商品ID = "

に、&演算子でtxtItemId.Textの値を連結して完全なSQLを生成しました。

しかし実際の業務処理では、最後のパラメータ(検索キーワードの部分)だけを切り替えて何度も検索を実行する場合があります。そのようなときには、仮のパラメータを与えたSQLをCommandTextに設定し、仮のパラメータにその都度値を追加する――という手法を用いると便利です。

特に条件式が長かったり複数の条件を組み合わせるような場合には、文字列の連結処理を何度も実行するより効率的です。


- 仮パラメータ設定方法の違い -

これを実現する方法が、SQL Serverを扱うSqlCommandオブジェクトとOLE DB接続のデータベースを扱うOleDbCommandオブジェクトで異なっています。

SqlCommandの場合
WHERE句の条件式で、“=”以降のパラメータ部分に“@”を接頭記号とする仮のパラメータを与えておきます。
 strSqlCommand = "SELECT 商品ID, 品名, 販売単価 " & _
             "FROM 商品_mr WHERE 商品ID = @ItemId"

OleDbCommandの場合
WHERE句の条件式で、“=”以降のパラメータ部分に“?”を設定しておきます。
 strSqlCommand = "SELECT 商品ID, 品名, 販売単価 " & _
             "FROM 商品_mr WHERE 商品ID = ?"

ここで用いている“@”付きの記号や“?”をパラメータ・マーカーと呼びます。



トップページ
SqlConnectionとOleDbConnectionの違い(1)
SqlConnectionとOleDbConnection
OleDbConnectionの利用
WHERE句と仮パラメータ
仮パラメータ設定方法の違い
SqlConnectionとOleDbConnectionの違い(2)
テーブルを書き換えるSQLの実行
サンプルアプリケーションの仕様
サンプルアプリケーションの作成
あとがき
Copyright © MESCIUS inc. All rights reserved.