Kısıtlamaları etkinleştirmek için başarısız oldu. Bir veya daha fazla satır değerleri boş olmayan, benzersiz veya yabancı anahtar kısıtlamalarını ihlal içerir
Bir dış ve başarıyla informix
veritabanındaki katılın idam yapıyorum ama benim kod: aşağıdaki özel durum alıyorum
DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);
Kısıtlamaları etkinleştirmek için başarısız oldu. Bir veya daha fazla satır değerleri içerir boş olmayan, benzersiz veya yabancı anahtar kısıtlamalarını ihlal.
Sorunu biliyorum ama nasıl düzelteceğimi bilmiyorum.
Dış birleştirme yapıyorum bu tablo, önceki dış birleştirme sorguda boş olan bileşik bir birincil anahtar içerir.
DÜZENLEME:
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 = ....
Sorun tablo ile cc1assiscrseval
olur. Birincil anahtar (batch_no, crsnum, lect_code).
Bu sorunu gidermek için nasıl?
DÜZENLEME:
@Göre PaulStock tavsiye: Ben ne dedi, ve ben alabilirim:
? dt.() GetErrors[0] {Sistem.Veri.DataRow} HasErrors: gerçek ItemArray: {object[10]} RowError: "Sütun '' DBNull izin vermiyor.eval Değer."
I e.eval
, NVL (e.eval,'') eval
değiştirerek sorunumu çözmek.ve bu sorunu çözer.
Çok teşekkürler.
CEVAP
Bu sorun, genellikle aşağıdakilerden biri nedeniyle oluşur
- null değerleri sütun AllowDBNull ayarlamak için iade ediliyor
- satır birincil anahtar aynı ile iade edilen yinelenen.
- veritabanı ve veri kümesi arasında sütun tanımı (char alanlar örneğin boyutu) ile uyuşmuyor
Sorgunuza yerel olarak çalışan ve eğer resultset çok büyük değil sonuca bakın, deneyin. Null değerleri ortadan kaldırmış olduk, o zaman benim tahminim birincil anahtar sütunlarını yineleniyor.
Ya da, tam hatayı görmek, el ile özel durum ortaya çıktığında ve daha sonra kırma gibi oluşturulan kodu için bir Try/Catch bloğu ekleyin:
Komut penceresi içinde, masaya GetErrors
yöntem hatası alıyorum Ara.
C# komut ? dataTable.GetErrors()
olurdu
VB için komut ? dataTable.GetErrors
Bu size bir hata var tüm datarow gösterecektir. Sorunu ile birlikte geçersiz olan sütun söylemeli ki sonra bunların her biri için RowError
bak. Yani, komut hata ilk datarow hata görmek için:
? dataTable.GetErrors(0).RowError
ya da C# ? dataTable.GetErrors()[0].RowError
olurdu
Doğrulama, bir veya daha fazla varlıkl...
Doğrulama Sunucu Veritabanı Varlık Çer...
İlişkinin yabancı anahtar özellikleri ...
Doğrulama başarısız oldu geçersiz veya...
Hata mesaj 'istenen türde bir vey...