Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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获取ms access 2010中多行的平均值#_C#_Ms Access - Fatal编程技术网

C# 使用c获取ms access 2010中多行的平均值#

C# 使用c获取ms access 2010中多行的平均值#,c#,ms-access,C#,Ms Access,您好,我正在制定一个员工评估计划,我需要获得每个字段每个员工的平均值,以便完成此任务。每次评估员工时,都会将其插入一个新行,以免覆盖前一个人对该员工的评估。我有代码,没有抛出错误,但没有编写代码数据库中的平均值 public void AvOut() { try { string request = tbEmployee.Text; //Opens a connection to the database OleDbConnecti

您好,我正在制定一个员工评估计划,我需要获得每个字段每个员工的平均值,以便完成此任务。每次评估员工时,都会将其插入一个新行,以免覆盖前一个人对该员工的评估。我有代码,没有抛出错误,但没有编写代码数据库中的平均值

public void AvOut()
{
    try
    {
        string request = tbEmployee.Text;
        //Opens a connection to the database
        OleDbConnection conn = new OleDbConnection(ConnString);
        conn.Open();

        OleDbCommand cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT [Admin].[OutPuts] FROM [Admin] WHERE EmployeeName ='" + request + "';";
        OleDbDataReader reader = cmd.ExecuteReader();

        int total = 0;
        int count = 0;

        while (reader.Read())
        {
            total += (int)reader["OutPuts"];
            count++;
        }

        int avg = total / count;

        OleDbCommand cmds = conn.CreateCommand();
        cmds.CommandText = "SELECT MAX(EmployeeID) AS [id_no] FROM [Admin];";
        OleDbDataReader dbReader = cmds.ExecuteReader();
        dbReader.Read();
        int id = Convert.ToInt32(dbReader["id_no"]);

        OleDbCommand tot = conn.CreateCommand();
        tot.CommandText = (@"UPDATE [Admin] SET AVGOutput ='" + avg + "' WHERE EmployeeID = " + id);
        int affected = tot.ExecuteNonQuery();

        conn.Close();
    }
    catch (Exception e)
    {
        MessageBox.Show("The exception is " + e.ToString());
    }
}

您可以尝试删除avg周围的单引号。因此您的查询应该是:

tot.CommandText = (@"UPDATE [Admin] SET AVGOutput =" + avg + " WHERE EmployeeID = " + id);

另外,设置一个断点,看看您是否在avg中得到了什么,并检查id

您似乎没有一个好的数据库设计。在继续之前纠正这一点是个好主意。例如,您应该至少有两个表,也可能有三个表:
Employee
Outputs
以及可能的
Performance
。Employee表应包含EmployeeID和一个分为两部分或两部分以上的员工姓名(姓氏、姓名等)。Outputs表应仅包含EmployeeID,而不包含名称。它不应该包含平均值,因为每个员工都有多行。续。。。。。CONT平均值应该放在性能表中,这样您就可以得到特定日期的平均值。但是,您可能根本不需要这个表,因为您应该能够从查询中获得所需的所有信息。我建议你在做更多的工作之前仔细阅读SQL和查询--