簡體   English   中英

如果子表包含C#/ ADO.NET 2.0中父表中沒有父行的行,是否可以將DataRelation添加到DataSet

[英]is it possible to add DataRelation to DataSet if child table contains rows that have no parent in parent table in C# / ADO.NET 2.0

如果我使用DataAdapter填充DataSet,從Dataders和Customers中選擇所有行並調用:

private void CreateRelation() 
{
    // Get the DataColumn objects from two DataTable objects 
    // in a DataSet. Code to get the DataSet not shown here.
    DataColumn parentColumn = 
        DataSet1.Tables["Customers"].Columns["CustID"];
    DataColumn childColumn = 
        DataSet1.Tables["Orders"].Columns["CustID"];
    // Create DataRelation.
    DataRelation relCustOrder;
    relCustOrder = new DataRelation("CustomersOrders", 
        parentColumn, childColumn);
    // Add the relation to the DataSet.
    DataSet1.Relations.Add(relCustOrder);
}

(來自http://msdn.microsoft.com/en-us/library/system.data.datarelation.aspx

如果訂單沒有客戶,則會出現運行時錯誤。 當有缺陷的程序在客戶被刪除時沒有刪除客戶的訂單時,可能會發生這種情況。

我可以做什么,除了將Orders選擇字符串另外的where-condition:

CUSTID IN (SELECT DISTINCT CUSTID FROM CUSTOMERS)

或者:這是真的那樣(所有孩子都必須有父母)? 我的代碼也可能有bug。 在IN MY CODE中我將關系添加到填充的DataSet時發生異常。 例外是:

System.Data.dll中發生了未處理的“System.ArgumentException”類型異常

附加信息:無法啟用此約束,因為並非所有值都具有相應的父值。

謝謝和最誠摯的問候 - 馬蒂

Add()方法有一個重載,它包含一個bool值來強制執行約束。 我想我過去曾經這樣用過:

DataRelation dr = ds.Relations.Add("name", DataColumnParent, DataColumnChild, false);

編輯

對不起,唯一的重載是這個方法簽名: http//msdn.microsoft.com/en-us/library/3zy636kc.aspx

DataRelationCollection.Add(String, DataColumn[], DataColumn[], bool)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM