Сеанс не работает для EmployeeDepartmentID, НО работает с EmployeeLevelID при использовании логических операторов - PullRequest
0 голосов
/ 19 сентября 2018

Мне было интересно, смогу ли я получить помощь здесь.Есть две важные вещи: 1. EmployeeLevelID (генеральный директор с EmployeeLevelID 1, вице-президент с EmployeeLevelID 2, руководитель с EmployeeLevelID 3 и RegularEmployee с EmployeeLevelID 4), и у меня также есть EmployeeDepartmentID, который соответствует отделам каждого сотрудника.У каждого сотрудника есть свой отдел.По сути, я пытаюсь добиться того, чтобы человек, вошедший в систему, был ОБА (VP EmployeeLevelID 2) и имел Отдел с EmployeeDepartmentID 1, он покажет всем сотрудникам с EmployeeDepartmentID 1-6
Когда я запустлюэтот код, он отлично работает:

 if (((string)Session["EmployeeLevelID"] == "2"))
            {
                using (SqlCommand cmd = new SqlCommand(query1, con))
                {

                    cmd.Parameters.AddWithValue("@EmployeeID", Session["EmployeeID"].ToString());

                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        lvEmployees.DataSource = dr;
                        lvEmployees.DataBind();
                    }
                }
            }

Но когда я запускаю его, ни один из сотрудников не начинает показывать: (Как только я начинаю включать EmployeeDepartmentID, сотрудники просто исчезают, и я не знаю почему.: / Какмне идти об этом?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Data;
using System.Data.SqlClient;

public partial class DEPARTMENTHEAD_ViewListOfEmployees : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

                GetEmployees1();

        }
    }
    /// <summary>
    /// Display list of author records from the database
    /// to the list view control. 
    /// </summary>
    void GetEmployees1()
    {
        using (SqlConnection con = new SqlConnection(Helper.GetConnection()))
        {
            string query1 = @"SELECT EmployeeID, LastName, FirstName, MiddleName 
                FROM EmployeeTable WHERE EmployeeDepartmentID=2 OR EmployeeDepartmentID=3 OR EmployeeDepartmentID=4 OR EmployeeDepartmentID=5 OR EmployeeDepartmentID=6";


            con.Open();



           if ((((string)Session["EmployeeLevelID"] == "2")) && ((string)Session["EmployeeDepartmentID"] == "1"))
            {
                using (SqlCommand cmd = new SqlCommand(query1, con))
                {

                    cmd.Parameters.AddWithValue("@EmployeeID", Session["EmployeeID"].ToString());

                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        lvEmployees.DataSource = dr;
                        lvEmployees.DataBind();
                    }
                }
            }

        }
    }





}

1 Ответ

0 голосов
/ 19 сентября 2018

Пожалуйста, измените ваш код следующим образом.

Шаг 1: Создайте одну хранимую процедуру для извлечения данных из SQL.

CREATE PROCEDURE dbo.GetEmployee

@EmployeeID INT

AS BEGIN

SELECT EmployeeID, LastName, FirstName, MiddleName 
FROM EmployeeTable WHERE 
EmployeeDepartmentID=2 OR EmployeeDepartmentID=3 OR 
EmployeeDepartmentID=4 OR EmployeeDepartmentID=5 OR 
EmployeeDepartmentID=6
AND EmployeeID=@EmployeeID

END

Шаг 2: Измените свой код следующим образом.

 public void GetEmployees1()
    {
        using (SqlConnection con = new SqlConnection(Helper.GetConnection()))
        {

            con.Open();

            if (Session["EmployeeLevelID"].ToString() == "2" && Session["EmployeeDepartmentID"].ToString() == "1")
            {
                SqlCommand cmd = new SqlCommand("GetEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@EmployeeID", Session["EmployeeID"].ToString());
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);

                lvEmployees.DataSource = ds;
                lvEmployees.DataBind();

            }

            con.Close();
        }
    }
...