0

こんにちは、従業員評価プログラムを作成しています。これを達成するために、フィールドごとに各従業員の平均を取得する必要があります。従業員は、前の人の評価を上書きしないように、評価されるたびに新しい行に挿入されています。その従業員の私は自分のコードを持っていて、エラーをスローしていませんが、データベースに平均を書き込んでいません

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());
    }
}
4

1 に答える 1

1

avg を囲む一重引用符を削除してみてください。したがって、クエリは次のようになります。

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

また、ブレークポイントを置いて、平均で何かを取得しているかどうかを確認し、IDも確認します

于 2012-05-10T14:15:35.670 に答える