0

我有问题。我有一个包含三个表的 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表的主键)不存在,但是,通过断点我已经验证数据在执行时在表中. 有人对此有答案吗?

4

2 回答 2

3

使用以下语法,您的插入语句会更加健壮:

insert into requiredskill (skillid, projectid) values ( ...)

...因为您可能有错误的列顺序。

于 2012-06-10T14:49:20.833 回答
1

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

确保提交第一个事务并重试。

于 2012-06-10T14:47:43.127 回答