- PR -

SQL内のパラメータの記述(ADODB.Parameter使用時)

1
投稿者投稿内容
NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2008-10-08 11:47
いつもお世話になっております。

ちょっと前(もしかして昔?)の技術のお話で恐縮なのですが、
ADODB.Parameterを使った場合のSQLの記述方法に関してお尋ねします。

例えば、Where条件の内容をパラメータとした場合、
AccessVBAでは
SELECT * FROM TABLE1 WHERE FIELD1 = Value1 としようが、
SELECT * FROM TABLE1 WHERE FIELD1 = ? としようが、
正常に動作するようなのですが、
ODBC経由でAccessに接続した場合
SELECT * FROM TABLE1 WHERE FIELD1 = ?
の記述方法でないと、「パラメータを指定してください」と怒られます。

また、SQLServerに関しては、?で指定しないと、列名がおかしいと怒られます。

とりあえず、「?」で指定しておけば良いのかな、という認識に落ち着こうかと
しているのですが、なんとなく不安なので、明確なガイドラインのようなものが
あればお教えいただきたいと思います。宜しくお願い致します。


rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-08 13:15
プレースホルダの指定方法は、データベースの種類ではなく、データソースとデータプロバイダによって決まります。

経験則ですみませんが、
・ODBC経由 … プレースホルダーは '?'
・OLEDB経由 … プレースホルダーは '?'
・SQLServerのSQLClient経由 … プレースホルダーは '@' + 名前
・OracleClient経由 … プレースホルダーは ':' + 名前
といった具合です。

引用:

NVLさんの書き込み (2008-10-08 11:47) より:

ODBC経由でAccessに接続した場合
SELECT * FROM TABLE1 WHERE FIELD1 = ?
の記述方法でないと、「パラメータを指定してください」と怒られます。

また、SQLServerに関しては、?で指定しないと、列名がおかしいと怒られます。


上については、ODBC経由で接続しているためです。
下についても、おそらくODBC経由でSQLServerに接続しているからだと思います。

私も経験でしか知らないので、根拠となるような資料があれば知りたいです。
データベースが SQLServer の場合に関してはここにありました。
http://msdn.microsoft.com/ja-jp/library/aa337223(SQL.90).aspx
NVL
常連さん
会議室デビュー日: 2006/04/03
投稿数: 45
投稿日時: 2008-10-08 14:42
rain様、早速ご回答いただき、ありがとうございます。

引用:

プレースホルダの指定方法は、データベースの種類ではなく、データソースとデータプロバイダによって決まります。

経験則ですみませんが、
・ODBC経由 … プレースホルダーは '?'
・OLEDB経由 … プレースホルダーは '?'
・SQLServerのSQLClient経由 … プレースホルダーは '@' + 名前
・OracleClient経由 … プレースホルダーは ':' + 名前
といった具合です。



私はてっきりADOが吸収してやってくれているとばっかり思ってました。
普段、.NETでSqlCommandとかODP.NETとか使っているときはパラメータ関連の
部分はそれ用に作ったクラス内部で隠蔽しているのであんまり意識したことがなく・・・。
今確かめてみたら、確かに@や:を使ってSQL文を生成してました。

それにしても、ADODB.ParameterのNameプロパティって何のために使うのやら。
SQL内の変数に名称バインドしてくれるわけじゃないし。


1

スキルアップ/キャリアアップ(JOB@IT)