2015-09-25 2 views
0

У меня есть таблицы Cases и Degrees с отношением Cases.CID - CDegrees.CID. CID - это первичный ключ Cases с автоинкрементностью.Обновление основных/дочерних рядов

Обе таблицы используются в одной форме, и предполагается, что пользователь может добавлять новые записи к обеим таблицам в одно и то же время, а не сохранять целые данные master/child в одном действии GUI.

Так что в наборе данных, где я создал FK, я устанавливал «Ограничение отношения и внешнего ключа» для обеспечения при обновлении новой записи в таблице Cases, полученное значение IDENTITY приведет к обновлению дочерних записей с -1 до значения CID.

Когда я обновляю адаптер Cases, он вызывает получение нового значения IDENTITY и каскадного обновления в CDegrees. Но обновление CDegrees вызывает сценарий Insert с [CID] = - 1 (исходное значение). Я изменил параметр «Вставить» @CID из CDegrees в «Предлагаемую» версию, но это же происходит (см. В SQL Profiler).

На самом деле моя задача намного сложнее, я просто упростил задачу локализации моей проблемы.


Описать более четко. перед обновлением В обоих случаях [Cases] и [CDegrees] есть одна новая запись с [CID] = - 1 после того, как [Cases] обновили оба параметра [Cases] и [CDegrees], имеют новое значение идентификатора CID, только [CDegrees]. [CID ] «Текущее» значение равно -1, а «Предлагаемый» - идентификатор. Но когда я вызываю обновление набора данных [CDegrees], он отправляет команду Insert Command в SQL с [CID] = - 1, независимо от того, что я указал источник параметра @CID в качестве предлагаемого значения [CID].

ответ

0

Это странно и забавно. Оказалось, что управление календарями по деталям каким-то образом вызывает, но предотвращает обновление данных каскада данных в соответствии с общим значением идентификации CID. Я только что изменил управление полем поля даты с MonthCalendar до DateTimePicker, и это сработало.