c#添加功能失败,insert语句与foreign key约束冲突,怎么办

时间:2021-05-29 00:34:36
错误视图:
c#添加功能失败,insert语句与foreign key约束冲突,怎么办

相应代码:(SujectId是外键)
  private void button1_Click(object sender, EventArgs e)
        {

            // 查询题目信息的sql语句
            string sql = "insert into Subject (SubjectId)values('" + text5.Text + "');";
            sql = "insert into Question ( QuestionId, Question,Answer,Difficulty,SubjectId,OptionA,OptionB,OptionC,OptionD) values ('" + text1.Text;
            sql += "', '" + text2.Text + "', '" + text3.Text + "', '" + text4.Text + "', '" + text5.Text + "', '" + text6.Text + "', '" + text7.Text + "', '" + text8.Text + "', '" + text9.Text + "');";
            try
            {
                SqlCommand command = new SqlCommand(sql, DBHelper.connection);
                DBHelper.connection.Open();
                command.ExecuteNonQuery();

                MessageBox.Show("添加成功!", "提示");

                DataGridViewRowCollection dgrc = dgv.Rows;
                Object[] objs = new Object[4];
                objs[0] = text1.Text;
                objs[1] = text2.Text;
                objs[2] = text3.Text;
                objs[3] = text4.Text;
                objs[4] = text5.Text;
                objs[5] = text6.Text;
                objs[6] = text7.Text;
                objs[7] = text8.Text;
                objs[8] = text9.Text;
                int row = dgrc.Add(objs);
                dgv.CurrentCell = dgv.Rows[row].Cells[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show("添加失败:" + ex.ToString(), "提示");
            }
            finally
            {
                DBHelper.connection.Close();
            }
        }

5 个解决方案

#1


这不是C#的问题,是sql server的报错。

你先搞清楚 外键约束
外键约束,比如表B存在一个字段b,有外键约束,引用于表A的主键a,那么在向表B插入数据时,字段b必须为表A中a已经存在的值;如果试图在字段b中存放一个a中没有的值,则会报违反外键约束。

你搞清楚主键约束,你的问题就明朗了。

#2


与外键冲突,课程表有对应的课程ID么?
还有第一个语句那儿,你是不用执行还是什么情况?看你的想法是想先插入课程ID,再加入相应的题啊。

#3


引用 2 楼 q469966816 的回复:
与外键冲突,课程表有对应的课程ID么?
还有第一个语句那儿,你是不用执行还是什么情况?看你的想法是想先插入课程ID,再加入相应的题啊。
课程表里面有对应的课程ID,而且是主键,第一个语句我是想要把课程ID插入课程表表中,看能不能解决这一冲突问题,结果还是报错。。。

#4


引用 1 楼 lovelj2012 的回复:
这不是C#的问题,是sql server的报错。

你先搞清楚 外键约束
外键约束,比如表B存在一个字段b,有外键约束,引用于表A的主键a,那么在向表B插入数据时,字段b必须为表A中a已经存在的值;如果试图在字段b中存放一个a中没有的值,则会报违反外键约束。

你搞清楚主键约束,你的问题就明朗了。
那主键约束怎么删除啊?

#5


引用 4 楼 cola0203 的回复:
Quote: 引用 1 楼 lovelj2012 的回复:

这不是C#的问题,是sql server的报错。

你先搞清楚 外键约束
外键约束,比如表B存在一个字段b,有外键约束,引用于表A的主键a,那么在向表B插入数据时,字段b必须为表A中a已经存在的值;如果试图在字段b中存放一个a中没有的值,则会报违反外键约束。

你搞清楚主键约束,你的问题就明朗了。
那主键约束怎么删除啊?

http://msdn.microsoft.com/zh-cn/library/ms189579(v=sql.105).aspx

#1


这不是C#的问题,是sql server的报错。

你先搞清楚 外键约束
外键约束,比如表B存在一个字段b,有外键约束,引用于表A的主键a,那么在向表B插入数据时,字段b必须为表A中a已经存在的值;如果试图在字段b中存放一个a中没有的值,则会报违反外键约束。

你搞清楚主键约束,你的问题就明朗了。

#2


与外键冲突,课程表有对应的课程ID么?
还有第一个语句那儿,你是不用执行还是什么情况?看你的想法是想先插入课程ID,再加入相应的题啊。

#3


引用 2 楼 q469966816 的回复:
与外键冲突,课程表有对应的课程ID么?
还有第一个语句那儿,你是不用执行还是什么情况?看你的想法是想先插入课程ID,再加入相应的题啊。
课程表里面有对应的课程ID,而且是主键,第一个语句我是想要把课程ID插入课程表表中,看能不能解决这一冲突问题,结果还是报错。。。

#4


引用 1 楼 lovelj2012 的回复:
这不是C#的问题,是sql server的报错。

你先搞清楚 外键约束
外键约束,比如表B存在一个字段b,有外键约束,引用于表A的主键a,那么在向表B插入数据时,字段b必须为表A中a已经存在的值;如果试图在字段b中存放一个a中没有的值,则会报违反外键约束。

你搞清楚主键约束,你的问题就明朗了。
那主键约束怎么删除啊?

#5


引用 4 楼 cola0203 的回复:
Quote: 引用 1 楼 lovelj2012 的回复:

这不是C#的问题,是sql server的报错。

你先搞清楚 外键约束
外键约束,比如表B存在一个字段b,有外键约束,引用于表A的主键a,那么在向表B插入数据时,字段b必须为表A中a已经存在的值;如果试图在字段b中存放一个a中没有的值,则会报违反外键约束。

你搞清楚主键约束,你的问题就明朗了。
那主键约束怎么删除啊?

http://msdn.microsoft.com/zh-cn/library/ms189579(v=sql.105).aspx