由于数据库约束错误,无法将值插入表中

时间:2012-06-10 14:41:46

标签: c# oracle constraints

我遇到了问题。我有一个带有三个表的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表的主键)不存在,但是,我有断点验证数据在执行时是否在表中。有没有人对此有答案?

2 个答案:

答案 0 :(得分:3)

使用语法

,您的insert语句会更强大
insert into requiredskill (skillid, projectid) values ( ...)

...因为您的列可能排列错误。

答案 1 :(得分:1)

我怀疑这是一个交易问题:如果插入项目ID是在一个(未提交的)事务中完成的,而插入所获得的技能是在另一个中完成的,后者将失败。

确保您提交第一笔交易并重试。