0

我对我的 HR 应用程序有点困惑 我有三种类型的用户

1)普通用户(基于位置的用户),分配类型U

2)管理员(基于公司),分配类型A

3) 管理分配类型 M

我的问题是表格 DATAGRIDVIEW 普通用户(HR)应该只获取他所在位置(分支机构)的员工详细信息,而管理员应该获取公司公司的全部员工详细信息,而管理层应该获取他们所有公司集团的全部员工详细信息

我有近 56 种表格,我在其中调用选择查询来获取数据,例如

 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
4

2 回答 2

1

我建议创建一个以用户角色为参数的存储过程,并基于此角色根据需要输出相关数据。存储过程可以在后端完成所有工作,结果将始终是通用的,并且可以绑定到 datagridview。

SqlCommand cmd = new SqlCommand("GetEmpMasterTableResults",CON);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserType", program.lctnpk);
于 2012-09-26T06:18:19.460 回答
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 中反映这一点可能是有意义的。

于 2012-09-26T06:14:47.703 回答