【问题标题】:loading dataset where the dataadapter select command uses the IN clause with a subquery加载数据适配器选择命令使用带有子查询的 IN 子句的数据集
【发布时间】:2017-03-12 14:22:38
【问题描述】:

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

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

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

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

将 MyDataView 调暗为 DataView = New DataView(ds.tables("ParentTable"))

将 MyTempParentTable 调暗为 DataTable = MyDataView.ToTable(False, "ParentKey")

daChild = New OleDbDataAdapter(CreateOledbCommand("select * from ChildTable where ChildKey in (MyTempParentTable)", dconn))

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

我几乎没有想法。我在谷歌上搜索到的所有 IN 子句都类似于 IN (value1, value2, value3...) 并且没有给出包含更复杂表达式的 IN 子句的任何示例。 任何人都可以告诉我我缺少什么,或者可能是一种不同的方式来完成这个吗?我正在尝试使 IN 子句起作用,因为我认为这是最有效的方法……也许不是……感谢您的帮助。

【问题讨论】:

    标签: select dataadapter


    【解决方案1】:

    我还没有找到关于为什么 IN 子句不起作用的问题的答案,但以防万一其他人有这个问题,我会发布我的解决方法。

    我像往常一样加载父记录,但我的子记录的 dataadapter select stmt 具有“WHERE 1=0”,因此最初加载了零个记录。当显示新的父记录时,我确定该父记录的子记录是否已加载到数据集中,如果没有,我将它们加载。底线是我不预加载子记录,而是我“按需”加载它们。这个解决方案对我来说效果很好。

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多