在依赖表上插入 Access 数据库时出现问题 [重复]
Posted
技术标签:
【中文标题】在依赖表上插入 Access 数据库时出现问题 [重复]【英文标题】:Problems inserting into Access Database on dependent tables [duplicate] 【发布时间】:2018-08-06 18:14:49 【问题描述】:我有一个包含我的工作的访问数据库,我正在尝试将其插入,但我一直在获取。
'您无法添加或更改记录,因为表'Projects'中需要相关记录。'
我正在运行这个查询:INSERT INTO Tasks (Assigned,Project,Description) VALUES (@assign,@project,@description)
在这个结构上:picture of database structure in access
使用带有 OleDb 的 C# 中的此代码...命令和连接对于其他查询来说工作正常:
private void addTaskBTN_Click(object sender, EventArgs e)
//the assign id is already known and is of type integer.
string query = "SELECT Project_ID FROM Projects WHERE Project_Name = @project";
OleDbConnection con = new OleDbConnection(con_string);
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@project", projectComboBox.Text);
con.Open();
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
project_id = Convert.ToInt16(reader[0]);
Console.WriteLine(project_id);
con.Close();
Console.WriteLine("submit: " + project_id + " " + employee_id + " " + descriptionTextBox.Text + " " + monthCalendar1.SelectionStart);
Console.WriteLine(monthCalendar1.SelectionStart);
query = "INSERT INTO Tasks (Assigned,Project,Description) VALUES (@assign,@project,@description)";
con = new OleDbConnection(con_string);
cmd = new OleDbCommand(query, con);
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@project", project_id);
cmd.Parameters.AddWithValue("@assign", employee_id);
cmd.Parameters.AddWithValue("@description", descriptionTextBox.Text.ToString());
//cmd.Parameters.AddWithValue("@deadline", monthCalendar1.SelectionStart);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
this.Close();
我已尝试查看此问题的其他示例,但我不明白为什么会出现此错误。 @project 具有项目主键的有效 ID 号,@assign 也具有有效的员工 ID,@description 是文本字符串。感谢您的帮助。
【问题讨论】:
无论您插入的project_id
不存在于Project
表中,您都需要将其添加到Tasks
中(存在外键约束)。尝试调试以查看插入的实际值是什么。将这些值添加到问题中。
这是经典。您以错误的顺序添加参数。您的 project_id 值用于 Assigned 字段,而 assigned 字段接收 project_id 值。
OleDb 无法通过查看参数名称对参数集合进行洗牌。它盲目地按照你添加它们的顺序设置参数
哇,非常感谢!我对这个问题感到很糟糕,但现在我希望每个人都能从中吸取教训!
【参考方案1】:
Steve 正确识别了您必须将参数按正确顺序排列的错误。我的解决方法是按顺序排列参数。
【讨论】:
正如我在 cmets 中所说的。这个问题是经典问题。有很多重复的。对此添加另一个答案是没有意义的。以上是关于在依赖表上插入 Access 数据库时出现问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 INSERT INTO 语句中插入值时出现语法错误。 -VB 和 ACCESS 2013
Access 2007,VBA:将 BLOB 插入链接表时出现奇怪的错误
使用 C# windows 窗体向 Ms Access 数据库插入新记录时出现语法错误
当我尝试通过 C# 将日期插入 Access 数据库时出现“INSERT INTO 语句中的语法错误”错误
在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效