我创建了一个外部连接并在 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. GetError ()[0]{ System. Data. DataRow } HasError: true ItemArray: { object [10]} RowError: “列‘ eval’不允许 DBNull.Value。”
所以我通过把 e.eval
替换成 NVL (e.eval,'') eval
来解决我的问题,这也解决了我的问题。
非常感谢。