在我的代码中,我尝试了foreignkeyconstraint
,但它不起作用(即当我删除与另一个表相关的行时它不会抛出错误。)
请告诉我以下代码的问题:
try
{
int salesid = 2;
DataSet ds1 = new DataSet();
DataSet fakeDS = new DataSet();
DataTable dt = null;
fakeDS.ReadXml(@"product.xml");
dt = fakeDS.Tables[0].Copy();
dt.TableName = "product";
ds1.Tables.Add(dt);
DataSet fakeDS2 = new DataSet();
DataTable dt2 = null;
fakeDS2.ReadXml(@"sales.xml");
dt2 = fakeDS2.Tables[0].Copy();
dt2.TableName = "sales";
ds1.Tables.Add(dt2);
DataColumn dcParent, dcChild;
dcChild = ds1.Tables["sales"].Columns["productid"];
dcParent = ds1.Tables["product"].Columns["id"];
ForeignKeyConstraint FKC = new ForeignKeyConstraint("foreignkeys", ds1.Tables["product"].Columns["id"], ds1.Tables["sales"].Columns["productid"]);
FKC.DeleteRule = Rule.None;
ds1.Tables[1].Constraints.Add(FKC);
ds1.Tables[1].AcceptChanges();
ds1.AcceptChanges();
for (int i = 0; i < ds1.Tables[1].Rows.Count; i++)
{
if (ds1.Tables[1].Rows[i]["salesid"].Equals(salesid.ToString()))
//if (ds1.Rows[i]["productid"].Equals(salesid.ToString()))
{
//dt2.Rows[i].Delete();
ds1.Tables[1].Rows[i].Delete();
}
}
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message.ToString());
}
答案 0 :(得分:0)
如果在表之间添加ForeignKeyConstraint,这意味着如果子表存在此代码,则无法从父表中删除数据,如果您这样删除
for (int i = 0; i < ds1.Tables[1].Rows.Count; i++)
{
if (ds1.Tables[0].Rows[i]["productid"].Equals(salesid.ToString()))
//if (ds1.Rows[i]["productid"].Equals(salesid.ToString()))
{
//dt2.Rows[i].Delete();
ds1.Tables[0].Rows[i].Delete();
}
}
ds1.AcceptChanges();
它显示例外
"Cannot delete this row because constraints are enforced on relation foreignkeys, and deleting this row will strand child rows."
因此,在这种情况下,第一次从子表中删除数据,然后第二次,您必须从父表中删除数据,
但是,如果从子表中删除数据,则无法自动从父表中删除数据。