亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法啟用約束。一個或多個行包含違反非空、唯一或外鍵約束的值。

無法啟用約束。一個或多個行包含違反非空、唯一或外鍵約束的值。

無法啟用約束。一個或多個行包含違反非空、唯一或外鍵約束的值。我創建了一個外部連接,并在informix數據庫,但我的代碼中有以下異常:DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);無法啟用約束。一個或多個行包含違反非空、唯一或外鍵約束的值。我知道問題,但我不知道怎么解決。我所做的外部聯接的第二個表包含一個復合主鍵,在前面的外部聯接查詢中為null。編輯:    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:“列‘val’不允許DBNull.Value”。所以我用e.eval到,NVL (e.eval,'') eval這解決了我的問題。非常感謝。
查看完整描述

3 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

此問題通常是由下列因素之一引起的

  • 未設置為AllowDBNull的列返回空值
  • 使用相同的主鍵返回重復行。
  • 數據庫和數據集之間列定義(例如char字段的大小)之間的不匹配

嘗試本機運行查詢,如果結果集不太大,請查看結果。如果您已經消除了空值,那么我的猜測是主鍵列正在被復制。

或者,要查看確切的錯誤,您可以手動向生成的代碼添加一個try/catch塊,就像這樣,然后在引發異常時中斷:

然后在命令窗口內調用GetErrors方法在表上獲取錯誤。
對于C#,命令如下? dataTable.GetErrors()
對于VB,命令是? dataTable.GetErrors

這將顯示所有錯誤的數據行。你可以看看RowError對于其中的每一個,都應該告訴您無效的列以及問題。因此,要查看錯誤中的第一個datarow的錯誤,命令如下:
? dataTable.GetErrors(0).RowError
或者在C#中? dataTable.GetErrors()[0].RowError


查看完整回答
反對 回復 2019-07-22
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

可以禁用數據集上的約束。它將允許您識別不良數據并幫助解決問題。

G.

dataset.TableA.Clear();dataset.EnforceConstraints = false;dataAdapter1.daTableA.Fill(dataset, TableA");

填充方法對您來說可能略有不同。


查看完整回答
反對 回復 2019-07-22
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

這將在表中找到有錯誤的所有行,打印該行的主鍵和該行上發生的錯誤.

這是在C#中實現的,但是將其轉換為VB并不困難。

 foreach (DataRow dr in dataTable)
 {
   if (dr.HasErrors)
     {
        Debug.Write("Row ");
        foreach (DataColumn dc in dataTable.PKColumns)
          Debug.Write(dc.ColumnName + ": '" + dr.ItemArray[dc.Ordinal] + "', ");
        Debug.WriteLine(" has error: " + dr.RowError);
     }
  }

對不起,PKColumns是我在擴展DataTable時添加的,它告訴我構成DataTable主鍵的所有列。如果您知道DataTable中的主鍵列,可以在這里循環它們。在我的例子中,由于我的所有數據都知道它們的PK Cols,所以我可以為所有表自動編寫這些錯誤的調試。

輸出如下:

Row FIRST_NAME: 'HOMER', LAST_NAME: 'SIMPSON', MIDDLE_NAME: 'J',  has error: Column 'HAIR_COLOR' does not allow DBNull.Value.



查看完整回答
反對 回復 2019-07-22
  • 3 回答
  • 0 關注
  • 991 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號