0

ユーザーがレポートの 3 つのフィルター基準を選択するという要件があります。これらの条件は、テーブルの任意のフィールドにすることができます。ユーザーは部門に対して一度定義しますが、他の部門では異なる場合があります。

ここでの課題は、これらの動的基準を使用してクエリを作成することです。これを達成するための動的クエリ以外にとにかくありますか? 動的クエリが唯一の解決策である場合、SQL インジェクションを最小限に抑えるにはどうすればよいでしょうか。

助けていただければ幸いです。

編集

私は実際に、フィタリング基準とその値として設定されたフィールドを取得できる方法を探しています。SPを使用しています。

列名とその値を渡す必要がありますか、それとももっと良い方法がありますか?

4

3 に答える 3

0

私はあなたが何を意味するのか分かりません

これらの条件は、テーブルの任意のフィールドにすることができます。ユーザーは部門に対して一度定義しますが、他の部門では異なる場合があります。

まず、データベースにアクセスするにはさまざまな方法があります。どのようにデータを読み書きしますか?

  • ADO.Net
  • NHibernate
  • エンティティ フレームワーク
  • 他の?

私自身は、NHibernate しかよく知りません。その場合、必要なフィルターをプロパティとして持つ、いわゆるクエリ クラスを作成します。クラス自体は内部的に HQL (または ICriteria) を作成し、インジェクションを回避するためにパラメーターを使用します。または、ストアド プロシージャを作成し、フィルターを引数として取り、ビューを返す可能性もあります。

それとも、ここでポイントを完全に見逃していますか?

于 2013-01-25T09:04:20.003 に答える
0
AND (@variable1 = '-1' OR column = @variable1)
AND (@variable2 = '-1' OR column = @variable2)
AND (@variable3 = '-1' OR column = @variable3)

ここに代替案があります

于 2013-01-25T08:59:15.983 に答える
0

これを試して:

WHERE
      (Col1 = @Col1Value OR @Col1Value IS NULL)
  AND (Col2 = @Col2Value OR @Col2Value IS NULL)
  AND (Col3 = @Col3Value OR @Col3Value IS NULL)
.....

次に、実際の (選択された) 値または選択されていない列の DBNull.Value を渡すことができます。

于 2013-01-25T09:06:42.470 に答える