无法将值插入表中,因为数据库约束为错误
本文关键字:数据库 因为 约束 错误 插入 | 更新日期: 2023-09-27 18:36:47
我遇到了问题。我有一个包含三个表的 Oracle 数据库设置,第一个是 project
,第二个是skill
,第三个是 requiredskill
,这是前两个表之间的链接。它们的两个主键都作为外键在第三个表中。
在我的程序中的某个时刻,我创建一个project
并将其保存在数据库中。紧接着,我将两个值插入requiredskill
表中,skill
表的某个主键和刚刚创建的项目的主键。
我使用以下代码插入数据:
OracleCommand cmd = new OracleCommand();
cmd.Parameters.Add(new OracleParameter("projID", project.ProjId));
foreach (Skill skill in skills)
{
cmd.Connection = conn;
cmd.Parameters.Add(new OracleParameter("skillID", skill.SkillID));
cmd.CommandText = "INSERT INTO REQUIREDSKILL VALUES(:skillID, :projID)";
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (OracleException)
{
}
finally
{
conn.Close();
}
}
一旦我执行查询,就会捕获一个OracleException
并告诉我项目 ID(project
表的主键)不存在,但是,使用断点我已经验证了数据在执行时是否在表中。有人对此有答案吗?
您的插入语句使用语法会更健壮:
insert into requiredskill (skillid, projectid) values ( ...)
。因为您的列顺序可能不正确。
我怀疑这是一个事务问题:如果插入项目 ID 在一个(未提交的)事务中完成,而插入所需的技能在另一个事务中完成,则后者将失败。
请确保提交第一个事务并重试。