[英]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.