0

問題が発生しています。最初の 1 つはproject、2 番目はskill、3 番目はrequiredskillで、最初の 2 つのテーブル間のリンクです。どちらの主キーも、外部キーとして 3 番目のテーブルにあります。

プログラムのある時点で、 を作成projectしてデータベースに保存します。requiredskillその直後に、テーブルの特定の主キーとskill作成したばかりのプロジェクトの主キーの2 つの値をテーブルに挿入します。

次のコードでデータを挿入します。

    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 の挿入が 1 つの (コミットされていない) トランザクションで行われ、必要なスキルの挿入が別のトランザクションで行われた場合、後者は失敗します。

最初のトランザクションをコミットして、再試行してください。

于 2012-06-10T14:47:43.127 に答える