- - PR -
ADO.NETでのIN演算子について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-29 14:18
つまり、A.XXX IN ("AAA","BBB",...) 要素数可変
というSQLのIN要素の値をパラメータを使用して設定するにはどうすればよいか。という事ですよね。 私も同じ様な事で悩んでいます。私の場合は、 「DateTime型のパラメータに値としてSYSDATEを設定する」 ですが。 ロバさんの挙げている「SQLインジェクション対策をしたくない」でパラメタをなるべく利用したいですが、この辺りの事で全てをパラメタで行えないのが現状です | ||||
|
投稿日時: 2005-03-29 14:40
動作確認してないですが、こんな感じです。
SYSDATEの場合はユーザーの入力ではないので、直にSQLに書いて問題ないのではないでしょうか? | ||||
|
投稿日時: 2005-03-29 18:54
こんなストアドを書いて、それを呼び出すとか・・・ってのはどうでしょう。
ADO.NETのパラメータ経由では試していませんが。 create proc pr_InSQL @param nvarchar(2000) as /* パラメータの例 set @param = '''IA-22'' ,''IA-28'' ' */ declare @sSql nvarchar(4000) set @sSql= 'select * from ProductList where productID in (' +@param + ')' exec (@sSql) @param の値の整合性は、いずれにしてもチェックが必要そうですね。 | ||||
|
投稿日時: 2005-03-29 19:14
それってアプリケーションからアドホッククエリを投げるのと同じじゃないですか? SQLインジェクションを十分に防げるかどうか怪しそうなんですが・・・。 もしかして exec() はシングルステートメントのみ実行可能、コメント等の冗長な記述があるとエラーになるなどの SQLインジェクションを予防できるような制限があるのでしょうか? | ||||
|
投稿日時: 2005-03-30 02:29
返事が遅くなってすみません。
一日中仕事に追われてまして・・・ おそらくburton999さんのおっしゃるとおり、 SQL文字列を生成した上でパラメータにセットするのが最適のようですね。 SQL文字列は静的なものでパラメータだけが可変、という印象があったので 考え付きませんでした。 今後はその方向で実装しようと思います。 |