Iam有点困惑我的HR应用程序我有三种类型的用户
1)普通用户(基于位置的用户),分配类型U
2)管理员(基于公司),分配类型A
3)管理层分配了类型M
我的问题在于表格DATAGRIDVIEW普通用户(HR)应该只获取其位置(分支)的员工详细信息,而管理员应该获得公司公司的整个员工详细信息,管理层应该获得所有他们的详细信息集团公司
我有近56种表单,其中Ia m调用select查询来获取数据,如
SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL" ,CON);
cmd.Parameters.AddWithValue("@Param1", empshiftdata.Empid);
但我的要求是
普通用户
(if program.usertype="n"){
SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL where branchlctn=@Param1",CON);
cmd.Parameters.AddWithValue("@Param1", program.lctnpk);
}
用于管理
(if program.usertype="M"){
SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL",CON);
或
}
但是在每个函数中调用三个不同的sql查询是不可行的 那么有什么想法可以连接两个查询吗? 喜欢
SqlCommand cmd = new SqlCommand("Select * from EMPMASTERTBL where branchlctn=@Param1",CON);
cmd.Parameters.AddWithValue("@Param1", program.lctnpk);//for normal user
cmd.Parameters.AddWithValue("@Param1", "*");//for Management user
答案 0 :(得分:1)
我建议创建一个将用户角色作为参数的存储过程,并根据此角色输出相关数据。存储过程可以在后端完成所有工作,结果将始终是通用的,并且可以绑定到datagridview。
SqlCommand cmd = new SqlCommand("GetEmpMasterTableResults",CON);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserType", program.lctnpk);
答案 1 :(得分: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 branchlctn=@Param1";
command.Parameters.AddWithValue("@Param1", program.lctnpk);
} else if (program.usertype == "M") {
command.CommandText = "Select * from EMPMASTERTBL";
}
或者,你可以有两个参数,总是:
SqlCommand command = new SqlCommand(
"Select * from EMPMASTERTBL where branchlctn=@Param1 or @usertype='M'" CON);
command.Parameters.AddWithValue("@Param1", program.lctnpk);
command.Parameters.AddWithValue("@usertype", program.usertype);
...让查询优化器计算出正在发生的事情。我对此解决方案略感不安 - 它很可能需要针对不同情况的不同查询计划;从根本上说,您正在执行不同的查询,因此在SQL中反映这一点可能是有意义的。