Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我有每个员工的总分配假期列,如何计算假期余额?_C#_Asp.net - Fatal编程技术网

C# 如果我有每个员工的总分配假期列,如何计算假期余额?

C# 如果我有每个员工的总分配假期列,如何计算假期余额?,c#,asp.net,C#,Asp.net,我有一个列为分配的叶子的详细信息表。我有一个额外的列用于LeavesTaken。现在我想计算每个员工的假期余额,并相应地更新它 { command.Connection = _connection; SqlDataReader reader = command.ExecuteReader(); Employee employee = new Employee(); List<Us

我有一个列为分配的叶子的详细信息表。我有一个额外的列用于
LeavesTaken
。现在我想计算每个员工的假期余额,并相应地更新它

        {
            command.Connection = _connection;
            SqlDataReader reader = command.ExecuteReader();
            Employee employee = new Employee();
            List<Users.LeaveRequest> leaves = new List<Users.LeaveRequest>();
            while (reader.Read())
            {
                leaves.Add(new Users.LeaveRequest() { DayPart = reader.GetInt32(3), fromdate = reader["fromdate"].ToString(), todate = reader["todate"].ToString() });
            }
            reader.Close();
            if (leaves.Count>0)
            {
                leaveRequests = leaves;
            }
            else
            {
                leaveRequests = null;
            }

            command.CommandText = "SELECT TotalLeaves,LeavesTaken FROM empDetails WHERE empID = @empid";
            //command.Parameters.AddWithValue("@empid", CurrentUser.Employee.EmpID);
            reader = command.ExecuteReader();
            if (reader.Read())
            {
                employee.TotalLeaves = reader.GetInt32(0);
                employee.LeavesTaken = reader.GetDouble(1);
            }
            reader.Close();
            return employee;
        }````

{
command.Connection=\u Connection;
SqlDataReader=command.ExecuteReader();
员工=新员工();
列表叶子=新列表();
while(reader.Read())
{
添加(新用户.LeaveRequest(){DayPart=reader.GetInt32(3),fromdate=reader[“fromdate”].ToString(),todate=reader[“todate”].ToString();
}
reader.Close();
如果(叶数>0)
{
叶子=叶子;
}
其他的
{
leaveRequests=null;
}
command.CommandText=“从empDetails中选择TotalLeaves,LeavesTaken,其中empID=@empID”;
//command.Parameters.AddWithValue(“@empid”,CurrentUser.Employee.empid);
reader=command.ExecuteReader();
if(reader.Read())
{
employee.totaleaves=reader.GetInt32(0);
employee.levestaken=reader.GetDouble(1);
}
reader.Close();
返回员工;
}````

我可以想出三种解决方案,因为您没有准确地指定所需的内容,也没有指定示例数据:

  • 您希望为员工计算总价值:

    SELECT SUM(TotalLeaves), SUM(LeavesTaken)
    FROM empDetails 
    WHERE empID = @empid
    
  • 您希望在这两个值之间保持平衡

    SELECT SUM(TotalLeaves) - SUM(LeavesTaken)
    FROM empDetails 
    WHERE empID = @empid
    
  • 如果每个
    empID
    有一条记录,您也可以尝试:

    SELECT TotalLeaves - LeavesTaken
    FROM empDetails 
    WHERE empID = @empid
    

  • 我很好奇为什么你的总假期是整数,但无论如何你可以在
    CommandText

    假设这三列
    AlloctedLeaves、TotalLeaves、LeavesTaken的数据类型为
    DECIMAL(4,2)

    现在我想计算每个员工的假期余额,并相应地更新它

            {
                command.Connection = _connection;
                SqlDataReader reader = command.ExecuteReader();
                Employee employee = new Employee();
                List<Users.LeaveRequest> leaves = new List<Users.LeaveRequest>();
                while (reader.Read())
                {
                    leaves.Add(new Users.LeaveRequest() { DayPart = reader.GetInt32(3), fromdate = reader["fromdate"].ToString(), todate = reader["todate"].ToString() });
                }
                reader.Close();
                if (leaves.Count>0)
                {
                    leaveRequests = leaves;
                }
                else
                {
                    leaveRequests = null;
                }
    
                command.CommandText = "SELECT TotalLeaves,LeavesTaken FROM empDetails WHERE empID = @empid";
                //command.Parameters.AddWithValue("@empid", CurrentUser.Employee.EmpID);
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    employee.TotalLeaves = reader.GetInt32(0);
                    employee.LeavesTaken = reader.GetDouble(1);
                }
                reader.Close();
                return employee;
            }````
    
    
  • 更新
    表empDetails

    {
        command.CommandText = "UPDATE empDetails " + 
                              "SET TotalLeaves = TotalLeaves - llottedLeaves, " +
                              "LeavesTaken = LeavesTaken + AllottedLeaves, " +
                              "AllottedLeaves = 0" +
                              "WHERE AllottedLeaves <> 0 AND AllottedLeaves <= TotalLeaves";
        command.Connection = _connection;
        command.ExecuteNonQuery();
    }
    
    {
        command.CommandText = "UPDATE empDetails " + 
                              "SET TotalLeaves = TotalLeaves - llottedLeaves, " +
                              "LeavesTaken = LeavesTaken + AllottedLeaves, " +
                              "AllottedLeaves = 0" +
                              "WHERE empID = @empid";
        command.Parameters.AddWithValue("@empid", CurrentUser.Employee.EmpID);
        command.Connection = _connection;
        command.ExecuteNonQuery();
    }
    

  • 请发布示例数据库
    LeaveBalance=TotalLeaves-LeavesTaken
    。为什么要在表中更新它?您有一个AllocatedLeaves列和一个LeavesTaken列,因此您可以随时计算要在应用程序中显示的余额。请出示一些样本数据,并明确说明您需要什么。