■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 に応じた型が自動的に指定されます)
|
|