【发布时间】: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