2012-09-26 39 views
0

蔭有點困惑了我的HR應用我有三個類型的用戶空調選擇查詢

1)普通用戶(基於位置的用戶)的分配類型裏面ü

2)管理員(公司總部)分配A型

3)管理分配的M型

我的問題是在窗體DataGridView普通用戶(HR)應該得到他的位置(分公司的員工詳細信息),只有在管理員應該得到整個員工詳細該公司mpany和管理應該得到他們所有的集團公司

我都快56的形式,其中IA打電話是選擇查詢,以獲得像

SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL" ,CON); 
      cmd.Parameters.AddWithValue("@Param1", empshiftdata.Empid); 

數據的整個EMP細節,但我的要求是

對於普通用戶

(if program.usertype="n"){ 
SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL where [email protected]",CON); 
       cmd.Parameters.AddWithValue("@Param1", program.lctnpk); 

} 

管理

(if program.usertype="M"){ 
    SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL",CON); 

} 

但它不是更多鈔票來調用三種不同的SQL查詢中的每個函數 那麼,有沒有想法Concat的兩個查詢? 像

SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL where [email protected]",CON); 
        cmd.Parameters.AddWithValue("@Param1", program.lctnpk);//for normal user 
        cmd.Parameters.AddWithValue("@Param1", "*");//for Management user 

回答

0

爲什麼不創造條件前的命令變量,然後設置的條件,在查詢本身和參數?

// TODO: Improve your naming, which is unconventional and includes odd 
// abbreviations ("lctnpk"?) 
SqlCommand command = new SqlCommand { Connection = CON }; 
if (program.usertype=="n") { 
    command.CommandText = "Select * from EMPMASTERTBL where [email protected]"; 
    command.Parameters.AddWithValue("@Param1", program.lctnpk); 
} else if (program.usertype == "M") { 
    command.CommandText = "Select * from EMPMASTERTBL"; 
} 

或者,你可以兩個參數,始終:

SqlCommand command = new SqlCommand(
    "Select * from EMPMASTERTBL where [email protected] or @usertype='M'" CON); 
command.Parameters.AddWithValue("@Param1", program.lctnpk); 
command.Parameters.AddWithValue("@usertype", program.usertype); 

...,讓查詢優化器的工作發生了什麼事情。我對這個解決方案稍微有些緊張 - 它很可能需要針對不同情況的不同查詢計劃;從根本上說,你正在執行不同的查詢,所以在你的SQL中反映出來可能是有意義的。

1

我建議創建一個存儲過程,將用戶角色作爲參數,並根據此角色輸出相關數據。存儲過程可以完成後端的所有工作,結果將始終是通用的,並且可以綁定到datagridview。

SqlCommand cmd = new SqlCommand("GetEmpMasterTableResults",CON); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("@UserType", program.lctnpk);