调整里面选择查询

时间:2012-09-26 06:06:13

标签: c#

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

2 个答案:

答案 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中反映这一点可能是有意义的。