Не удалось включить ограничения. Одна или несколько строк содержат значения, нарушающие ненулевые, уникальные или внешние ключи - 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 ]

0 голосов
/ 05 декабря 2018
            using (var tbl = new DataTable())
            using (var rdr = cmd.ExecuteReader())
            {
                tbl.BeginLoadData();

                try
                {
                    tbl.Load(rdr);
                }
                catch (ConstraintException ex)
                {
                    rdr.Close();
                    tbl.Clear();

                    // clear constraints, source of exceptions
                    // note: column schema already loaded!
                    tbl.Constraints.Clear();
                    tbl.Load(cmd.ExecuteReader());
                }
                finally
                {
                    tbl.EndLoadData();
                }
            }
0 голосов
/ 23 июня 2014

* Вторичный путь: *


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

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

в вашем DataSet> TableAdapter> щелкните правой кнопкой мыши по столбцу [id]> выберите Delete key ...

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

...