为什么我的方法没有更新

时间:2013-05-09 17:29:37

标签: c# winforms ms-access

我有三张桌子。我有一个名为employeemaintable的主表

  Fieldname    Data Type 
* EID          Text
  Firsname     Text
  Surname      Text

第二个表名为employeeJobdetailstable

 Fieldname      Data Type
* EJobID        Text
  EID           Text
  JobDescrip    Text

第三个名为EmployeeAppraisalDetails的表

   Fieldname         DataType
   EApprID           Text
   EJobID           Text
   GoalsAchieved     Memo

关系是employeemaintable可以有很多employeeJobdetailstable 和employeeJobdetailstable可以有很多EmployeeAppraisalDetails。

  1. 我可以成功创建,更新和删除记录employeemaintable
  2. 我可以成功创建,更新和删除记录employeeJobdetailstable
  3. 我可以插入和删除EmployeeAppraisalDetails的记录,但我无法更新。
  4. 这是我的更新方法......

    EAppr Class

     public static void AUpdate(string goals, string eapprid)
        { 
            var con = GetConnection();
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = (@"UPDATE [EmployeeAppraisalDetails] SET [Goalsachieved] = ? WHERE [EApprID] = ?");
            cmd.Parameters.AddWithValue("@Goalsachieved", goals);
            cmd.Parameters.AddWithValue("@EApprID", eapprid);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    

    主要课程

    private void btnUpdateAppr_Click(object sender, EventArgs e)
        {
            EAppr.AUpdate(cBApprScore.Text, txtApprID.Text);
        }
    

    我的问题

    我做错了什么?没有错误所以我认为这是因为EmployeeAppraisalDetails没有链接到employeemaintable或者我做错了更新方法?这个想法是让employeeJobdetailstable有很多EmployeeAppraisalDetails。一个职位可以有很多评估。

    非常感谢

    更新1 我在ExecuteNonQuery上进行了调试,这就是我得到的

    string goals  === "Test"
    string eapprid === "". 
    

    更新2

    将GoalsAchieved的数据类型从备忘录更改为文本。我目前在EmployeeAppraisalDetails中有两条记录。我只能更新一次以前没有记录的最新记录。因此,当我关闭并重新启动应用程序时,我无法更新任何一条记录

    更新3 因为我使用的是MS Access 2003和C#,所以我决定不使用更新参数。当SQL Server应该被使用时,不值得麻烦。

2 个答案:

答案 0 :(得分:0)

AddWithValue并不总是完美的,我们发送字符串值,只发送参数名称。但实际数据类型是访问数据库中的备忘录。通过AddWithValue方法映射正确的数据类型时可能会出现问题。因此最好给出类型并添加如下所示的参数

cmd.Parameters.Add("@GoalsAchieved", OleDbType.LongVarWChar).Value = goals;

答案 1 :(得分:0)

我有更新3我的理由关闭这个帖子。感谢大家的宝贵专业知识。

相关问题