Не удалось включить ограничения.При использовании адаптера таблицы данных - PullRequest
8 голосов
/ 15 октября 2011

Я получаю

Не удалось включить ограничения. Одна или несколько строк содержат значения Нарушение ненулевых, уникальных или внешних ключей.

для следующего запроса в моем адаптере таблицы.

select 
f.id, f.name, p.productid, p.masterproductID, f.productid, f.dateCreated, f.retired, p.code as HTML_DisplayName, p.ThumbnailID, p.code
from FormSaveData f 

inner join Products p on (f.productid = p.ProductID or f.productId = p.MasterProductID)

where f.userId = 130559
and (p.b_IsArchived = 0 and p.b_IsRetired=0 and p.b_IsStaged = 0)

Когда я запускаю запрос сам по себе, он отлично работает, другие идентификаторы пользователей также работают нормально, так что это очень специфический случай. Я сузил это до того факта, что я внутренне присоединяюсь к

f.productid = p.ProductID **or** f.productId = p.MasterProductID

Я считаю, что в некоторых редких случаях это вызывает конфликт, который не нравится адаптеру таблицы. Я довольно новичок, когда дело доходит до адаптеров таблиц и SQL, поэтому любые советы о том, как это лучше написать или почему это происходит, будут с благодарностью.

Нет ограничений, ключей или специальных правил, установленных для чего-либо в таблице FormSaveData.

Ответы [ 2 ]

9 голосов
/ 15 октября 2011

Мне кажется, что ваш запрос возвращает несколько записей с одинаковым product_id, и адаптер таблицы ожидает только уникальные строки. Я вполне уверен, что вы можете отключить поведение, установив EnforceConstraints в false.

4 голосов
/ 23 июня 2014

Если вам не нужно, чтобы [id] был первичным ключом,

Удалите атрибут его первичного ключа:

в вашем DataSet> TableAdapter> щелкните правой кнопкой мыши по столбцу [id]>выберите Удалить ключ ...

Проблема будет исправлена.

...