0

私のコードでは、試し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());
        }
4

1 に答える 1

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."

したがって、その場合、最初に子テーブルからデータを削除し、次にテーブルからデータを削除する必要があります。

ただし、子テーブルからデータを削除すると、親テーブルからデータが自動的に削除されます。

于 2012-08-24T07:33:36.560 に答える