我有三张桌子。我有一个名为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。
这是我的更新方法......
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应该被使用时,不值得麻烦。
答案 0 :(得分:0)
AddWithValue
并不总是完美的,我们发送字符串值,只发送参数名称。但实际数据类型是访问数据库中的备忘录。通过AddWithValue
方法映射正确的数据类型时可能会出现问题。因此最好给出类型并添加如下所示的参数
cmd.Parameters.Add("@GoalsAchieved", OleDbType.LongVarWChar).Value = goals;
答案 1 :(得分:0)
我有更新3我的理由关闭这个帖子。感谢大家的宝贵专业知识。