0

グリッドをフィルタリングするために使用しているクエリがあります

     SELECT * FROM Resources
              WHERE ResourceName  ='" + ResourceName + "' 
              AND  Status = '" + status + "' "

私のグリッドはこのように見えます

  ResourceID|ResourceName|Status

グリッドをフィルタリングするためのドロップダウンにResorceNameとStatusを追加しましたが、このselectステートメントで、いずれかのパラメーターがnullの場合、データはグリッドにバインドされませんが、両方のパラメーターを渡すと、グリッドとグリッドから必要な行またはフィルター処理された行を指定します...パラメーターのいずれかがnullの場合、selectステートメントを作成する方法を教えてもらえますか。

4

3 に答える 3

1

キャッチオールクエリに関する以下の投稿をご覧ください

すべての例をキャッチ

于 2012-08-01T12:54:31.993 に答える
1

問題を迅速に解決するという点では、このようなものがうまくいくでしょう...

Select * From Resources Where (ResourceName = '"+ ResourceName + "' OR ResourceName IS NULL) AND (Status = '" + Status +"' OR Status IS NULL)

ただし、これは SQL インジェクションに対して脆弱であるため、許容できるコードではありません。本質的に、渡される ResourceName が

'; Drop Table Resources; --

それが何をするのかを説明する必要はないでしょう。

私のアドバイスは、.Net では常に SQLCommand オブジェクトを使用することです。これは、他の言語では「準備済みステートメント」としても知られています。この種のトリックを防ぎます...

于 2012-08-01T13:08:21.513 に答える
0
SELECT * FROM Resources
WHERE (ResourceName  = CASE WHEN '" + ResourceName + "' IS NULL THEN ResourceName  ELSE '" + ResourceName + "' END) //do same for other parameter
于 2012-08-01T13:07:02.433 に答える