C# 数据集中的关系表始终返回0行

C# 数据集中的关系表始终返回0行,c#,.net,vb.net,ado.net,dataset,C#,.net,Vb.net,Ado.net,Dataset,我已经在VS2005数据集设计器中创建了一个强类型数据集。 有两个表在一对多关系中相互关联:Claim和ClaimDetail。设计器自动创建函数GetClaimDetailRows,该函数返回ClaimRow的所有ClaimDetailRows为什么此数组的长度始终为0? 因为ClaimDetail包含超过4000万行,所以在调用GetClaimDetailRows之前,我没有填充它,而是将它的selectcommand配置为只使用参数idData填充相关记录。但这似乎不起作用,因为Claim

我已经在VS2005数据集设计器中创建了一个强类型数据集。 有两个表在一对多关系中相互关联:Claim和ClaimDetail。设计器自动创建函数GetClaimDetailRows,该函数返回ClaimRow的所有ClaimDetailRows为什么此数组的长度始终为0? 因为ClaimDetail包含超过4000万行,所以在调用GetClaimDetailRows之前,我没有填充它,而是将它的selectcommand配置为只使用参数idData填充相关记录。但这似乎不起作用,因为ClaimDetail数据表是空的


(来源:)

ClaimRow类中自动生成的函数,返回所有相关的ClaimDetailRows:

        Public Function GetClaimDetailRows() As ClaimDetailRow()
            If (Me.Table.ChildRelations("Claim_ClaimDetail") Is Nothing) Then
                Return New ClaimDetailRow(-1) {}
            Else
                Return CType(MyBase.GetChildRows(Me.Table.ChildRelations("Claim_ClaimDetail")),ClaimDetailRow())
            End If
        End Function
调试时,我看到它跳入else块,但返回0行。 我是否必须首先为每个索赔填写Claimdetail数据表(ClearBeforeFill=True)?但是我不需要再使用这个函数了


更新:在调用子函数并使其工作之前,我现在填充数据表(ClearBeforeFill=True)。但我不明白,当我试图访问一个子关系而不填充该数据表(至少0行)时,为什么它不能(可选地)抛出异常。相反,它返回0行,这些行可以是正确的,也可以是不正确的,并且很难检测到。这是缺乏设计还是我遗漏了什么

因为生成的GetChildRows()假定(所有)子记录都加载到内存中


您必须在客户机部分(表单)中编写一些代码。您可以使用BindingSource.CurrentChanged并将适当的记录填充到子表中。

但当我将所有记录保留在datatable中时,服务器的内存迟早会崩溃。同时,我认为我应该使用关系表中的GetData(idData)并迭代返回的Datatable,而不是使用此函数。@Tim:这就是我想说的。当0行也是有效状态时,它怎么会引发异常?我不确定我是否走对了方向。Datatable是否知道它是否由DataAdapter填充?如果是,它可以将此信息保存在标志中,并在访问其Rows属性或调用与此Datatable相关的getChildRows函数时引发异常。通常情况下,从未填充记录的数据表中获取记录是没有意义的,是吗?数据表不知道适配器。