在我的项目中,我使用两个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
语句吗?
答案 0 :(得分:4)
您无法删除DOCTOR表中的数据,因为您通过医生的身份证与患者表有关系。