C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: 名前付きパラメータ


(過去ログ 17 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■6488 / inTopicNo.1)  名前付きパラメータ
  
□投稿者/ VB2005初心者 (1回)-(2007/08/16(Thu) 00:52:01)

分類:[VB.NET/VB2005] 

はじめまして。
VB2005+MDBにてアドバイス頂ければ幸いです。

クエリビルダでフィルタにパラメータ(例えば、@prm)を記述したのですが、
パラメータとして認識されません。

データのプレビューでパラメータのところに「選択されたオブジェクトに定義されたパラメータはありません。」となります。
SQLを見ましても、WHERE (XXX = '@param') となっています。

正しくは、WHERE (XXX = @param)とならなくてはいけないのでしょうか?
(但し、'をはずすとエラーになってしまいます。)

MDBを使用しているのが原因なのでしょうか?
(SQLServerでは大丈夫?)

引用返信 編集キー/
■6489 / inTopicNo.2)  Re[1]: 名前付きパラメータ
□投稿者/ 魔界の仮面弁士 (377回)-(2007/08/16(Thu) 04:00:13)
No6488 (VB2005初心者 さん) に返信
> クエリビルダでフィルタにパラメータ(例えば、@prm)を記述したのですが、
> パラメータとして認識されません。

対応する Parameters が正しく定義されていますか?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=5253&KLOG=15


> WHERE (XXX = '@param')
これだと、「@param」という文字列を検索している事になってしまいます。
両端の『'』は外しましょう。
引用返信 編集キー/
■6496 / inTopicNo.3)  Re[2]: 名前付きパラメータ
□投稿者/ VB2005初心者 (2回)-(2007/08/16(Thu) 12:23:14)
No6489 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 様
アドバイスありがとう御座います。

> 対応する Parameters が正しく定義されていますか?

すいません、今ひとつ理解出来ませんでした。
これは、クエリビルダ上に生成されている、SQLの前に記述する、、、といった事なのでしょうか?
(具体的な記述方法もわかりませんでした・・・)


> これだと、「@param」という文字列を検索している事になってしまいます。
> 両端の『'』は外しましょう。

Parameters を但しく定義すれば、はずしてもエラーにはならないかと思いますが、
現状でははずすとエラーになってしまいます。




試しに、クエリビルダ上のフィルタに「?」を記述したところ
パラメータとして認識してくれました。

この方法もあり?なんでしょうか???

ご教授頂ければ幸いです。

引用返信 編集キー/
■6499 / inTopicNo.4)  Re[3]: 名前付きパラメータ
□投稿者/ 魔界の仮面弁士 (379回)-(2007/08/16(Thu) 13:44:33)
No6496 (VB2005初心者 さん) に返信
>>対応する Parameters が正しく定義されていますか?
> これは、クエリビルダ上に生成されている、SQLの前に記述する、、、といった事なのでしょうか?

SQL 中に Parameters 句を含めても良いですが、もし、クエリビルダがその構文を解析できなかった場合には、
SQL 中の Parameters 句ではなく、後から手動で、TableAdapter (あるいは DataAdapter) の Parameters を設定してみてください。

なお、SQL 中のそれぞれの変数名などは、両端を [ ] で囲っておいた方が安全です。


> 試しに、クエリビルダ上のフィルタに「?」を記述したところ
> パラメータとして認識してくれました。
> この方法もあり?なんでしょうか???

「あり」です。ただしそれは順序で指定されるパラメータであって、今回の目的である

> 名前付きパラメータ

ではありませんよね。
引用返信 編集キー/
■6500 / inTopicNo.5)  Re[4]: 名前付きパラメータ
□投稿者/ 中博俊 (1144回)-(2007/08/16(Thu) 14:28:44)
中博俊 さんの Web サイト
OLEDBプロバイダだから

select * from tbl where key = ?

って?をつかわなきゃ
引用返信 編集キー/
■6501 / inTopicNo.6)  Re[5]: 名前付きパラメータ
□投稿者/ VB2005初心者 (3回)-(2007/08/16(Thu) 15:34:19)
No6500 (中博俊 さん) に返信

中博俊 様

アドバイスありがとう御座います。

MDBファイルの場合、パラメータとして「?」を使用。
SQLServerの場合、パラメータとして「@xxxx」を使用。

といった感じになるのでしょうか。。。
(超初心者的な質問で大変恐縮です。)

引用返信 編集キー/
■6504 / inTopicNo.7)  Re[6]: 名前付きパラメータ
□投稿者/ VB2005初心者 (4回)-(2007/08/16(Thu) 16:08:05)
魔界の仮面弁士 様

度々のアドバイスありがとう御座います。


>「あり」です。ただしそれは順序で指定されるパラメータであって、今回の目的である
>> 名前付きパラメータ
>ではありませんよね。

おっしゃるとおりです。
ただ、「?」でパラメータになる・・・という事すら知りませんでした
(お恥ずかしい限りです)ので、ここは「?」で行こうかと考えております。

ただ、Parametersの後記述も試してみて、やりやすい方にしようと思います。

引用返信 編集キー/
■6511 / inTopicNo.8)  Re[7]: 名前付きパラメータ
□投稿者/ 魔界の仮面弁士 (380回)-(2007/08/16(Thu) 18:09:35)
> MDBファイルの場合、パラメータとして「?」を使用。
> SQLServerの場合、パラメータとして「@xxxx」を使用。

そのように覚えておいても構わないと思います。

ただし実際には、DB の種類ではなく、使用するプロバイダによって
パラメータの構文が決定されていますので、同じ DB に違うプロバイダで
接続した場合には、別の SQL が要求されることもあります。


> 「?」でパラメータになる・・・という事すら知りませんでした
あぁ…一般的な方法も一緒に紹介しておけば良かったですね。すみません。
ヘルプでいえば、たとえばこのあたりです。
http://msdn2.microsoft.com/ja-jp/library/ms171905%28VS.80%29.aspx

あと、プログラム実装の前に、チュートリアル等を一通り試しておくことをおすすめします。
今回のパラメータ指定の話も触れられていますよ。
http://msdn2.microsoft.com/ja-jp/library/hbsty6z7%28VS.80%29.aspx


> ので、ここは「?」で行こうかと考えております。
そうですね。mdb 用のコマンドをデザイナで作成する分には、『?』のプレースホルダを
使う方が一般的ですし、その方が問題も起きにくいです。

実際の動作では、mdb に対しては、元の SQL が名前付きであっても ? のプレースホルダであっても、
OleDbParamter は『順序(序数)』を基準に割り当てられてしまい、『名前』は無視されてしまいますので。
http://msdn2.microsoft.com/ja-jp/library/system.data.oledb.oledbparameter%28VS.80%29.aspx


そもそも、mdb に対する DataAdapter の SQL にパラメータを指定する場合には、
 (1) ? プレースホルダを使用して、無名パラメータを指定する。
 (2) PARAMETERS 句を使用して、名前と型を指定する。
 (3) 任意名のパラメータ名を埋め込んで、自動変数として指定する。
のいずれかを使うことができるようになっています。

そして 先に紹介した(C#サンプルの)URL のように、DataAdapter をプログラムから
指定するような場合は、(1),(2),(3)のいずれも使用できます。一応は。

しかしながら、Visual Studio のクエリビルダがサポートしているのは(1)のみです。
(ちなみに、Access のクエリビルダがサポートしているのは(2)と(3)です)

そのため、Visual Studio のデザイナから TableAdapter を作るような場合は、
(2)や(3)の構文だと、パラメータの自動解析が行われないという制限があります。

ただし、ビルダ等がサポートしていない場合であっても、SQL そのものが有効であるならば、
SelectCommand 等の Parameters プロパティを後から手動で割り当ててやることで、
「WHERE (XXX = @param)」といった SQL に対しても、「データのプレビュー」を正常に機能させられます。

手動でパラメータを追加する場合は、TableAdapter の SelectCommand プロパティを開き、
Parameters プロパティ横の[...]を押して、手動でパラメータを追加指定すれば OK です。
最低限指定するべき項目は、ProviderType (Integer や VarWChar など)の指定です。
(このとき、DbType は、ProviderType に応じた型が自動的に指定されます)
引用返信 編集キー/
■6517 / inTopicNo.9)  Re[8]: 名前付きパラメータ
□投稿者/ VB2005初心者 (5回)-(2007/08/16(Thu) 19:06:39)
No6511 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 様

ご丁寧に教えて頂き、感謝しております。
アドバイスを元に勉強していきたいと思います。
ありがとうございました。


中博俊 様
アドバイスありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -