【问题标题】:Why my method is not updating为什么我的方法没有更新
【发布时间】:2013-05-16 20:50:47
【问题描述】:

我有三张桌子。我有一个名为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 时不值得麻烦。

【问题讨论】:

  • ExecuteNonQuery 返回受影响的记录数。这个数字是多少?
  • 您在 MS-Access SQL 查看器中运行查询时是否遇到同样的问题?
  • 我不知道它是什么,但我按照您的建议进行了调试,并且已经更新。我也会使用 MS-Access SQL 查看器。

标签: c# winforms ms-access


【解决方案1】:

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

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

【讨论】:

  • 我已将数据类型从备忘录更改为文本。如果你好奇,我有更新 2
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2018-03-21
    • 2011-10-10
    • 2018-03-13
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多