0

私はこのエラーが発生しています

The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint "FK__Subjects__fk_sub__6383C8BA". 
The conflict occurred in database "The Library", table "dbo.Subjects", column '_id'.

_idアイデンティティであり、ユニークでプライマリです。コンテンツがデータベースに入力されると、自動的に生成される必要があります。

テーブルを作成するための私のSQL。

create table Subjects
(
    _id integer identity not null,
    unique(_id),
    primary key(_id),
    subject varchar(50) not null,
    [content] varchar(MAX) not null,
    fk_subfolderTo integer not null,
    foreign key(fk_subfolderTo) references Subjects(_id),
    signed varchar(150) not null,
    fk_writer integer not null,
    foreign key(fk_writer) references Users(_id)
)

テーブルに挿入するための C# コード。

public static void Create (SqlConnection con, int userId, string subject, string content, string signed, int subfolderTo)
    {
        using (var command = new SqlCommand("Insert into Subjects (subject, [content], fk_subfolderTo, signed, fk_writer) values ('" + subject + "', '" + content + "', " + subfolderTo + ", '" + signed + "', " + userId + ")", con))
        {
            command.ExecuteNonQuery();
        }
    }

MSSQLを使用しています。

4

1 に答える 1

1

ID を生成しています。問題は、サブフォルダー ID として渡すものは何でも、既存のデータ セットにないことです。

また、fk_subfolderto を nullable に設定することをお勧めします。そうしないと、サブジェクトが自分自身のサブサブジェクトになることを余儀なくされます。

また、SQL インジェクションの悪夢に遭遇する前に、文字列を連結して SQL を構築するのではなく、パラメーター化されたクエリを使用する必要があります。

于 2013-09-21T14:53:55.017 に答える