1

我有三张桌子。我有一个名为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 的记录,但我无法更新。

这是我的更新方法...

EAppr 类

 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

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

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

4

2 回答 2

0

我有更新 3 是因为我关闭了这个帖子。感谢大家提供宝贵的专业知识。

于 2013-05-16T12:50:47.217 回答
0

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

cmd.Parameters.Add("@GoalsAchieved", OleDbType.LongVarWChar).Value = goals;
于 2013-05-09T18:26:09.107 回答