Я загружаю подмножество родительских записей и дочерних записей в набор данных, а затем устанавливаю datarelations и foreignkeyconstraints, поэтому, когда я создаю dataadapter, выберите stmt для дочерние записи, я должен убедиться, что только дочерние записи, чей родитель присутствует, загружаются, чтобы избежать ошибок ссылочной целостности. Поскольку подмножество ParentTable загрузилось в набор данных, который я попробовал:Загрузка набора данных, где команда выбора dataadapter использует предложение IN с подзапросом
daChild = new OleDBDataAdapter (CreateOledbCommand («выберите * из таблицы для детей, где ChildKey in (ds.tables (« «ParentTable» «))», dconn))
Но получил ошибку «неопределенные функции» ds.tables в выражении «ошибка во время выполнения.
Итак, я попытался создать таблицу в один столбец, чтобы перейти к пункту IN, как этот:
Dim MyDataView как DataView = Новый DataView (ds.tables ("ParentTable"))
Dim MyTempParentTable в DataTable = MyDataView.ToTable (False, "ParentKey")
daChild = Новый OleDbDataAdapter (CreateOledbCommand ("выберите * из ChildTable где ChildKey в (MyTempParentTable)", dconn))
Я проверил в отладчике , и MyTempParentT на самом деле это одна таблица столбцов, содержащая ключ ParentTable. Я думал, что предложение IN может принимать один столбец datatable как действительный ввод. По-видимому, нет, так как я получаю ошибку «Нет значения для одной или нескольких требуемых параметров» во время выполнения.
Я просто из идей. Все мои поисковые запросы google для предложения IN были чем-то вроде IN (value1, value2, value3 ...) и не дают никаких примеров для предложения IN, содержащего более сложное выражение. Неужели кто-нибудь подскажет мне, что мне не хватает, или, может быть, другой способ это сделать? Я пытаюсь заставить предложение IN работать, потому что я думаю, что это самый эффективный способ сделать это ... Может быть, это не ... Спасибо за любую помощь.