0

C# と asp.net を使用してプロジェクトにユーザー権限管理を実装しようとしています。私がやりたいことは、ログイン名に従って関連ページをユーザーに表示することだけです。多くの SQL 選択コマンドを作成しました。

SQL select コマンドでのみ WHERE 部分を変更する方法はありますか? たとえば、ユーザーがボタンをクリックしたときを意味します

...WHERE REGION='IC'になる...WHERE REGION<>'IC'

または、そのようなシナリオを実装するための他のプラクティスについて教えてください。

前もって感謝します

編集:私の選択コマンド

SELECT * FROM (SELECT Firma,BOLGE,SUM(KDV_MATRAHI) AS TUTAR from SATISLAR_T WHERE DAHIL=0 AND REGION=REGION  GROUP BY Firma,BOLGE UNION SELECT Firma,CH_YETKI_KODU AS BOLGE, SUM(KDV_MATRAHI)  AS TUTAR
FROM LNX_STD_6_016_01_SLSINVOICES WHERE MALZEME_OZEL_KODU<>'DİĞER GLR'   AND REGION=REGION GROUP BY REGION, Firma) AS BOLGE
  PIVOT
(
SUM(TUTAR)
    FOR Firma IN ([008] ,[009] ,[010] ,[011], [012], [013], [014] ,[015],[016])
)AS pvt

ユーザーがボタンをクリックした後:

SELECT * FROM (SELECT Firma,BOLGE,SUM(KDV_MATRAHI) AS TUTAR from SATISLAR_T WHERE DAHIL=0 AND REGION='IC'  GROUP BY Firma,BOLGE UNION SELECT Firma,CH_YETKI_KODU AS BOLGE, SUM(KDV_MATRAHI)  AS TUTAR
FROM LNX_STD_6_016_01_SLSINVOICES WHERE MALZEME_OZEL_KODU<>'DİĞER GLR'   AND REGION<>'IC' GROUP BY CH_YETKI_KODU, Firma) AS BOLGE
  PIVOT
(
SUM(TUTAR)
    FOR Firma IN ([008] ,[009] ,[010] ,[011], [012], [013], [014] ,[015],[016])
)AS pvt
4

3 に答える 3

1

簡単で汚い方法は、パラメーターを渡すことです

where 
  ((@Param=1 and REGION = 'IC')
    or
  (@Param=2 and REGION <> 'IC'))
于 2016-12-08T09:25:08.407 に答える
1

SQL を作成するときは、次のようにフォーマットすることをお勧めします。

// depending on condition 
// we put either REGION='IC' or REGION<>'IC' instead of {0} place holder
string sql = string.Format( 
    // Make slq readable and maintainable, use @ verbatim strings
  @"select ...
     where {0} 
     ...", condition ? "REGION='IC'" : "REGION<>'IC'"); 

using (var command = new SqlCommand(connection)) {
  command.CommandText = sql;
  ...
}

C# 6.0の場合、文字列補間は代替手段です。

string sql =  
  $@"select ...
      where {(condition ? "REGION='IC'" : "REGION<>'IC'")} 
      ..."; 
于 2016-12-08T09:29:11.137 に答える
0

その機能を実装する明白な方法は、2 つの異なるクエリを関数として持ち、ボタンの状態に応じて適切なクエリを呼び出すことです。巧妙なコードやトリックは必要ありません。

于 2016-12-08T09:24:42.660 に答える