Не удалось включить ограничения. Одна или несколько строк содержат значения, нарушающие ненулевые, уникальные или внешние ключи - PullRequest
153 голосов
/ 11 августа 2011

Я выполняю внешнее соединение и успешно выполняюсь в базе данных informix, но в моем коде получено следующее исключение:

DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);

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

Я знаю проблему, но не знаю, как ее исправить.

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

РЕДАКТИРОВАТЬ:

    SELECT UNIQUE a.crs_e,  a.crs_e  || '/ ' || a.crst crs_name, b.period,
           b.crscls, c.crsday, c.from_lect, c.to_lect,
           c.to_lect - c.from_lect + 1 Subtraction, c.lect_kind, e.eval, e.batch_no,
           e.crsnum, e.lect_code, e.prof_course
    FROM rlm1course a, rfc14crsgrp b, ckj1table c, mnltablelectev d,
         OUTER(cc1assiscrseval e)  
    WHERE a.crsnum = b.crsnum 
    AND b.crsnum = c.crsnum 
    AND b.crscls = c.crscls 
    AND b.batch_no = c.batch_no 
    AND c.serial_key = d.serial_key  
    AND c.crsnum = e.crsnum  
    AND c.batch_no = e.batch_no  
    AND d.lect_code= e.lect_code 
    AND d.lect_code = .... 
    AND b.batch_no = ....

Проблема возникаетсо столом cc1assiscrseval.Первичный ключ (batch_no, crsnum, lect_code).

Как решить эту проблему?


РЕДАКТИРОВАТЬ:

Согласно @PaulStock совет: я делаю то, что он сказал, и я получаю:

?dt.GetErrors () [0] {System.Data.DataRow} HasErrors: true ItemArray: {object [10]} RowError: «Столбец 'eval' не допускает DBNull.Value."

Поэтому я решаю свою проблему, заменяя e.eval на NVL (e.eval,'') eval., И это решает мою проблему.Большое спасибо.

Ответы [ 22 ]

2 голосов
/ 11 августа 2011

Возможно, один или несколько столбцов выбираются с помощью:

   e.eval, e.batch_no, e.crsnum, e.lect_code, e.prof_course

имеет AllowDBNull , установленный на False в определении набора данных.*

1 голос
/ 19 августа 2014

Я решил ту же проблему, изменив это значение с ложного на истинное.в конце концов я зашел в базу данных и изменил свое битовое поле, чтобы разрешить null, а затем обновил свой xsd и обновил мой wsdl и reference.cs, и теперь все в порядке.

this.columnAttachPDFToEmailFlag.AllowDBNull = true;
0 голосов
/ 08 октября 2015

В моем случае эта ошибка была вызвана размером строкового столбца.Что было странно, когда я выполнял один и тот же запрос в другом инструменте, повторных значений или нулевых значений там не было.

Затем я обнаружил, что размер столбца строки равен 50, поэтому при вызове заливкиМетод, значение было нарезано, выбрасывая это исключение.
Я нажимаю на столбец и устанавливаю в свойствах размер 200, и ошибка исчезла.

Надеюсь, эта помощь

0 голосов
/ 20 сентября 2012

DirectCast (dt.Rows (0), DataRow) .RowError

Это напрямую дает ошибку

0 голосов
/ 25 февраля 2015

Просто хочу добавить еще одну возможную причину исключения к перечисленным выше (особенно для людей, которым нравится определять схему набора данных вручную):

когда в вашем наборе данных у вас есть две таблицы и существует отношение (DataSet.Reletions.Add()), определенное из поля первой таблицы (chfield), к полю второй таблицы (pfield), добавляется неявное ограничение для этого поля должно быть уникально , даже если оно не указано явно в вашем определении ни как уникальный, ни как первичный ключ.

Как следствие, если у вас есть строки с повторяющимися значениями в этом родительском поле (pfield), вы также получите это исключение.

0 голосов
/ 20 февраля 2015

Чтобы исправить эту ошибку, я снял адаптер таблицы проблем с дизайнера набора данных, сохранил набор данных, а затем перетащил свежую копию адаптера таблицы из проводника сервера, и это исправило его

0 голосов
/ 05 января 2015

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

Другой способ - открыть файл .xsd обычным образом, посмотритев таблице / представлении, вызывающем проблему, и удалите все ключи (щелкните правой кнопкой мыши столбец, выберите delete key), которых там быть не должно.

0 голосов
/ 18 августа 2014

У меня также была эта проблема, и она была решена после изменения * .xsd, чтобы отразить измененный размер столбца, измененного на базовом сервере SQL.

0 голосов
/ 30 апреля 2014

Если вы используете дизайнер наборов данных Visual Studio для получения таблицы данных, и он выдает ошибку «Не удалось включить ограничения». Я столкнулся с той же проблемой, попробуйте предварительно просмотреть данные самого дизайнера наборов данных и сопоставить их с таблицей в вашей базе данных.

Лучший способ решить эту проблему - удалить адаптер таблицы и вместо него создать новый.

0 голосов
/ 02 февраля 2018

Я решил эту проблему, выполнив «подвыбор» следующим образом:

string newQuery = "select * from (" + query + ") as temp";

Когда это делается в mysql, все свойства столкновения (уникальные, ненулевые ...) будут очищены.

...