繁体   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