自动生成_id时,_id上的INSERT冲突

时间:2013-09-21 14:33:59

标签: c# sql-server

我收到此错误

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。

1 个答案:

答案 0 :(得分:1)

正在生成ID。问题是您传递的任何内容,因为子文件夹ID不在现有数据集中。

我还建议将fk_subfolderto设置为可空,否则你将被迫最终将主题作为自己的子主题。

此外,您应该使用parameterised queries,而不是在遇到SQL注入噩梦之前通过字符串连接构建SQL。