0

HR アプリケーションについて少し混乱しています。3 種類のユーザーがありました。

1) 通常のユーザー (ロケーション ベースのユーザー) 、割り当てられたタイプ U

2) 管理者(企業ベース) 、割り当てられたタイプ A

3) 管理職M型

私の問題は、フォームDATAGRIDVIEWの通常のユーザー(HR)が自分の場所(支店)の従業員の詳細を取得する必要があるのに対し、管理者は会社の従業員の詳細全体を取得する必要があり、管理者はすべての会社グループの従業員の詳細全体を取得する必要があります

次のようなデータを取得するために select クエリを呼び出しているほぼ 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);

また

    }

しかし、各関数で 3 つの異なる SQL クエリを呼び出すことはできません。2 つのクエリを連結するアイデアはありますか? お気に入り

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";
}

または、常に次の 2 つのパラメーターを使用することもできます。

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 に答える