2016-10-30 11 views
0

Я загружаю подмножество родительских записей и дочерних записей в набор данных, а затем устанавливаю 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 работать, потому что я думаю, что это самый эффективный способ сделать это ... Может быть, это не ... Спасибо за любую помощь.

ответ

0

Я не нашел ответа на вопрос о том, почему предложение IN не работает, но на всякий случай у кого-либо еще есть эта проблема, я опубликую свое обходное решение.

Я загружаю родительские записи как обычно, но мой выбор данных для выбора stmt для дочерних записей имеет «WHERE 1 = 0», так что сначала загружаются нулевые записи. Когда отображается новая родительская запись, я затем определяю, загружены ли дочерние записи для этого родителя в набор данных, если нет, я загружаю их. Нижняя строка заключается в том, что я не предварительно загружаю дочерние записи, а я загрузите их «по требованию». Это решение работает хорошо для меня.