DELETE语句与REFERENCE约束冲突

时间:2012-11-03 05:31:54

标签: c# sql sql-server

在我的项目中,我使用两个DataSet填充两个数据库表。我用来填充这些数据库表的方法如下所示:

SqlCommand sqlCommand = new SqlCommand();            
SqlCommand command;
using (SqlConnection conn = new SqlConnection(strConn))
{
    using (SqlCommand cmd = new SqlCommand(strQuery, conn))
    {
        using (SqlCommand cmdReset = new SqlCommand("DBCC CHECKIDENT('Doctor', RESEED, 0)", conn))
        {
            using (SqlCommand cmdUnCheck = new SqlCommand("alter table [dbo].[Doctor] nocheck constraint all",conn))
            {
                using (SqlCommand cmdCheck = new SqlCommand("alter table [dbo].[Doctor] with check check constraint all",conn))
                {
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    conn.Open();
                    SqlTransaction sqlTransaction = conn.BeginTransaction();
                    cmd.Transaction = sqlTransaction;
                    cmdReset.Transaction = sqlTransaction;
                    cmdUnCheck.Transaction = sqlTransaction;
                    cmdCheck.Transaction = sqlTransaction;
                    try
                    {
                        cmdUnCheck.ExecuteNonQuery();
           /*ERROR*/    cmd.ExecuteNonQuery();
                        cmdReset.ExecuteNonQuery();//deleting database table data
                        foreach (DataRow dr in ds.Tables[0].Rows) //Inserting new data into the Database table
                        {
                            command = new SqlCommand(query.createDoctorRow("Doctor",
                            dr[1].ToString(), dr[2].ToString(), Convert.ToInt64(dr[3]), Convert.ToInt32(dr[4])), conn, sqlTransaction);
                            command.ExecuteNonQuery();
                        }
                        cmdCheck.ExecuteNonQuery();
                        sqlTransaction.Commit();
                        conn.Close();
                    }
                    catch (Exception e)
                    {
                        sqlTransaction.Rollback();
                        throw;
                    }
                }
            }
        }
    }                
}

上面的代码工作正常,直到第二个Database表为空,但当我在其中插入一些数据然后运行代码时,VS显示错误 - >

  

DELETE语句与REFERENCE约束“FK_Dr_ID”冲突。冲突发生在数据库“Hospital”,表“dbo.Patient”,列'Doctor_ID'中。   声明已经终止。

这似乎很明显,外键限制了查询的发生,但由于我是初学者而且不知道该怎么做我正在请求你的帮助..

在上面的代码中,我对这个SO answer进行了更改但没有快乐,错误仍然存​​在于同一点。

可选:无论如何都要减少代码中的using语句吗?

1 个答案:

答案 0 :(得分:4)

您无法删除DOCTOR表中的数据,因为您通过医生的身份证与患者表有关系。