0

我正在尝试使用 C# 和 asp.net 在项目中实现用户权限管理。我要做的只是根据登录名向用户显示相关页面。我写了很多 SQL 选择命令。

有没有办法只在 SQL 选择命令中更改 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

我建议在形成 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的情况下,字符串 interpotaion是一种替代方法:

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

一种快速而肮脏的方法是传递参数

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

实现该功能的明显方法是将两个不同的查询作为函数并根据按钮的状态调用适当的查询。不需要聪明的代码或技巧。

于 2016-12-08T09:24:42.660 回答