Je fais une jointure externe et l'exécute avec succès dans le fichier informix
mais j'obtiens l'exception suivante dans mon code :
DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);
Échec de l'activation des contraintes. Une ou plusieurs lignes contiennent des valeurs violant des contraintes de valeur non nulle, unique ou de clé étrangère.
Je connais le problème, mais je ne sais pas comment le résoudre.
La deuxième table sur laquelle je fais la jointure externe contient une clé primaire composite qui est nulle dans la requête de jointure externe précédente.
EDIT :
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 = ....
Le problème se produit avec la table cc1assiscrseval
. La clé primaire est (batch_no, crsnum, lect_code).
Comment résoudre ce problème ?
EDIT :
Selon les conseils de @PaulStock : Je fais ce qu'il dit, et j'obtiens.. :
? dt.GetErrors()[0] {System.Data.DataRow} HasErrors : true ItemArray : {objet[10]} RowError : "La colonne 'eval' n'autorise pas DBNull.Value."
Je résous donc mon problème en remplaçant e.eval
à , NVL (e.eval,'') eval
.et cela résout mon problème. Merci beaucoup.
0 votes
Quand je retire
,e.eval,e.batch_no,e.crsnum,e.lect_code,e.prof_course
A partir de la requête, tout va bien. Quel est le problème ?0 votes
Il existe également un bogue dans ADO.NET où un "index clusterisé non unique" créera un élément Data.UniqueConstraint erroné sur la DataTable.