在依赖表上插入 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 数据库时出现“不正确的字符串值”,但重试有效

使用 UCanAccess 插入 ResultSet 时出现“必须在插入之前设置所有列”错误