加载数据集,其中dataadapter select命令将IN子句与子查询

时间:2016-10-30 05:33:25

标签: select dataadapter

我正在将父记录和子记录的子集加载到数据集中,然后设置datarelations和foreignkeyconstraints,因此当我构建dataadapter时,为子记录选择stmt,我必须确保只有子记录的子记录加载父项是为了避免引用完整性错误。由于ParentTable的子集已加载到我尝试的数据集中:

daChild = new OleDBDataAdapter(CreateOledbCommand(“select * from Childtable where ChildKey in(ds.tables(”“ParentTable”“))”,dconn))

但是在表达式中出现了“未定义的函数'ds.tables'”运行时出错。

所以,我尝试创建一个列表来传递给IN子句,如下所示:

Dim MyDataView as DataView = New DataView(ds.tables(“ParentTable”))

将MyTempParentTable变暗为DataTable = MyDataView.ToTable(False,“ParentKey”)

daChild =新OleDbDataAdapter(CreateOledbCommand(“select * from ChildTable,其中ChildKey in(MyTempParentTable)”,dconn))

我检查了调试器,而MyTempParentTable实际上是一个包含ParentTable键的一列表。我认为IN子句可以将一列数据表作为有效输入。显然不是,因为我在运行时得到“没有给出一个或多个必需参数的值”错误。

我只是出于想法。我的所有谷歌搜索都是因为IN子句类似于IN(value1,value2,value3 ......),并且没有给出包含更复杂表达式的IN子句的任何示例。 谁能让我知道我错过了什么,或者可能采用不同的方式来实现这一目标?我正试图让IN子句起作用,因为我认为这是最有效的方法......也许它不是......感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我没有找到关于为什么IN子句不起作用的问题的答案,但是如果其他人有这个问题,我将发布我的解决方法。

我像往常一样加载父记录,但我的dataadapter选择stmt为子记录有一个“WHERE 1 = 0”,因此最初加载零记录。当显示新的父记录时,我确定该父记录的子记录是否已经加载到数据集中,如果没有,我加载它们。底线是我不预先加载子记录,而是我按需“加载”。这个解决方案适合我。