Không thể kích hoạt các ràng buộc. Một hoặc nhiều hàng chứa các giá trị vi phạm các ràng buộc không phải là null, duy nhất hoặc khóa ngoài


167

Tôi thực hiện tham gia bên ngoài và thực hiện thành công trong informixcơ sở dữ liệu nhưng tôi nhận được ngoại lệ sau trong mã của mình:

DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);

Không thể kích hoạt các ràng buộc. Một hoặc nhiều hàng chứa các giá trị vi phạm các ràng buộc không null, duy nhất hoặc khóa ngoài.

Tôi biết vấn đề, nhưng tôi không biết cách khắc phục.

Bảng thứ hai tôi tạo liên kết ngoài trên chứa khóa chính tổng hợp không có giá trị trong truy vấn nối ngoài trước đó.

BIÊN TẬP:

    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 = ....

Vấn đề xảy ra với bảng cc1assiscrseval. Khóa chính là (batch_no, crsnum, speech_code).

Làm thế nào để khắc phục vấn đề này?


BIÊN TẬP:

Theo @PaulStocklời khuyên: Tôi làm những gì anh ấy nói, và tôi nhận được:

? dt.GetErrors () [0] {System.Data.DataRow} HasErrors: true ItemArray: {object [10]} RowError: "Cột 'eval' không cho phép DBNull.Value."

Vì vậy, tôi giải quyết vấn đề của mình bằng cách thay thế e.eval, NVL (e.eval,'') evalvà điều này giải quyết vấn đề của tôi. Cảm ơn rất nhiều.


Khi tôi loại bỏ ,e.eval,e.batch_no,e.crsnum,e.lect_code,e.prof_coursekhỏi truy vấn, mọi thứ đều ổn. vấn đề là gì
Anyname Donotcare

Ngoài ra còn có một lỗi trong ADO.NET trong đó "chỉ mục cụm không duy nhất" sẽ tạo ra một mục Data.UniqueConstraint sai trên DataTable.
Brain2000

Câu trả lời:


351

Vấn đề này thường được gây ra bởi một trong những điều sau đây

  • giá trị null được trả về cho các cột không được đặt thành AllowDBNull
  • các hàng trùng lặp được trả về với cùng khóa chính.
  • sự không phù hợp trong định nghĩa cột (ví dụ: kích thước của các trường char) giữa cơ sở dữ liệu và bộ dữ liệu

Hãy thử chạy truy vấn của bạn một cách tự nhiên và xem kết quả, nếu tập kết quả không quá lớn. Nếu bạn đã loại bỏ các giá trị null, thì tôi đoán là các cột khóa chính đang được sao chép.

Hoặc, để xem lỗi chính xác, bạn có thể thêm khối Thử / Bắt thủ công vào mã được tạo như vậy và sau đó ngắt khi ngoại lệ được đưa ra:

nhập mô tả hình ảnh ở đây

Sau đó trong cửa sổ lệnh, gọi GetErrorsphương thức trên bảng nhận lỗi.
Đối với C #, lệnh sẽ là ? dataTable.GetErrors()
Đối với VB, lệnh là? dataTable.GetErrors

nhập mô tả hình ảnh ở đây

Điều này sẽ hiển thị cho bạn tất cả các datarows có lỗi. Sau đó, bạn có thể xem xét RowErrortừng cái, cái này sẽ cho bạn biết cột không hợp lệ cùng với vấn đề. Vì vậy, để xem lỗi của datarow đầu tiên bị lỗi, lệnh là:
? dataTable.GetErrors(0).RowError
hoặc trong C #, nó sẽ là? dataTable.GetErrors()[0].RowError

nhập mô tả hình ảnh ở đây


4
Cảm ơn rất nhiều . >? dt.GetErrors()[0] {System.Data.DataRow} HasErrors: true ItemArray: {object[10]} RowError: "Column 'eval' does not allow DBNull.Value."
Anyname Donotcare

4
Tuyệt vời. Điều đó không hiệu quả, nhưng tôi có thể thêm một chiếc đồng hồ cho bộ dữ liệu và nhập .GetErrors sau nó và mở rộng các giá trị. Điều đó cực kỳ hữu ích. Hy vọng tôi sẽ không quên nó trước lần tiếp theo tôi cần :)
lùn

6
Có, điều này thực sự hữu ích - lý do cho lỗi của tôi là độ dài của trường dài hơn độ dài tối đa của cột trong bộ điều hợp bảng. Một điều tôi đã nhận thấy là để đạt điểm dừng trong tệp thiết kế, bạn cần truy cập Công cụ> Tùy chọn> Gỡ lỗi và đảm bảo bỏ chọn "Bật chỉ mã của tôi". Sau đó, nó sẽ cho phép bạn chuyển qua mã tệp thiết kế.
e-on

1
Cảm ơn @PaulStock cho bạn câu trả lời Tôi đã giải quyết vấn đề tương tự.
Uday

1
Điều này cực kỳ hữu ích, tôi tìm thấy sự không phù hợp giữa chiều dài cột dữ liệu - nó được tăng lên trong cơ sở dữ liệu chứ không phải trong tập dữ liệu.
Rob

38

Bạn có thể vô hiệu hóa các ràng buộc trên tập dữ liệu. Nó sẽ cho phép bạn xác định dữ liệu xấu và giúp giải quyết vấn đề.

ví dụ

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

Phương pháp điền có thể hơi khác nhau đối với bạn.


1
Điều này giúp tôi tìm thấy dữ liệu gây ra sự cố của mình, đó không phải là "dữ liệu xấu" mà là hành vi xấu của Trình hướng dẫn cấu hình nguồn dữ liệu. Rõ ràng là không nhận được các ràng buộc cột đã sửa đổi (và tôi đang thiếu một bảng được thêm vào để khởi động), mặc dù đi ra ngoài và nói chuyện với DB ... và với bộ đệm không được bật.
fortboise

Cảm ơn câu trả lời này. Tôi gặp vấn đề về Phân biệt chữ hoa chữ thường và chỉ cần đặt nó một cách thích hợp trong Bộ dữ liệu.
Dan

10

Điều này sẽ tìm thấy tất cả các hàng trong bảng có lỗi, in ra khóa chính của hàng và lỗi xảy ra trên hàng đó ...

Đây là trong C #, nhưng chuyển đổi nó sang VB không nên khó khăn.

 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);
     }
  }

Rất tiếc - xin lỗi PKColumn là thứ tôi đã thêm khi mở rộng DataTable cho tôi biết tất cả các cột tạo nên khóa chính của DataTable. Nếu bạn biết các cột Khóa chính trong khả năng lưu trữ của mình, bạn có thể lặp qua chúng ở đây. Trong trường hợp của tôi, vì tất cả các cơ sở dữ liệu của tôi đều biết các PK của chúng, tôi có thể tự động viết gỡ lỗi cho các lỗi này cho tất cả các bảng.

Đầu ra trông như thế này:

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

Nếu bạn bối rối về phần PKColumn ở trên - phần này sẽ in ra các tên và giá trị của cột, và không cần thiết, nhưng thêm thông tin khắc phục sự cố hữu ích để xác định giá trị cột nào có thể gây ra sự cố. Xóa phần này và giữ phần còn lại vẫn sẽ in lỗi SQLite đang được tạo, sẽ lưu ý cột có vấn đề.


1
Cách tuyệt vời để tìm ra chính xác nơi nó đã đi sai. Hoàn toàn giúp tôi giải quyết các vấn đề trong một giải pháp mà tôi được thừa hưởng khi có sự không nhất quán với dữ liệu. Mặc dù nó nằm trên một Dataset và tôi chỉ lặp qua từng bảng, sau đó mỗi hàng. +10 nếu tôi có thể.
Andez

Điều này làm việc cho tôi. Đó là một Column 'MyColumn' does not allow DBNull.Value, nhưng nó sẽ không cho thấy bất kỳ cách nào khác. Cảm ơn :)
Alex

7
  • Đảm bảo các trường có tên trong truy vấn bộ điều hợp bảng khớp với các trường trong truy vấn bạn đã xác định. DAL dường như không thích sự không phù hợp. Điều này thường sẽ xảy ra với các sprocs và truy vấn của bạn sau khi bạn thêm một trường mới vào bảng.

  • Nếu bạn đã thay đổi độ dài của trường varchar trong cơ sở dữ liệu và XML có trong tệp XSS chưa được chọn, hãy tìm tên trường và định nghĩa thuộc tính trong XML và thay đổi thủ công.

  • Xóa các khóa chính khỏi danh sách chọn trong bộ điều hợp bảng nếu chúng không liên quan đến dữ liệu được trả về.

  • Chạy truy vấn của bạn trong SQL Management Studio và đảm bảo không có bản ghi trùng lặp nào được trả về. Bản ghi trùng lặp có thể tạo các khóa chính trùng lặp sẽ gây ra lỗi này.

  • Công đoàn SQL có thể đánh vần rắc rối. Tôi đã sửa đổi một bộ điều hợp bảng bằng cách thêm một bản ghi 'vui lòng chọn một nhân viên' trước các bản khác. Đối với các trường khác tôi đã cung cấp dữ liệu giả bao gồm, ví dụ: chuỗi có độ dài một. DAL đã suy ra lược đồ từ bản ghi ban đầu đó. Các bản ghi sau với chuỗi có độ dài 12 không thành công.


1
Chào mừng đến với SO, Bob. Tôi đã chỉnh sửa câu trả lời của bạn (mặc dù vẫn đang xem xét). Ví dụ: chúng tôi không muốn có lời chào và chữ ký trong câu trả lời (được coi là "noice", vui lòng xem Câu hỏi thường gặp). Tên và gravatar của bạn sẽ luôn luôn hiển thị bên dưới câu trả lời nào.
Christoffer Lette

5

Điều này làm việc cho tôi, nguồn: ở đây

Tôi đã có lỗi này và nó không liên quan đến các ràng buộc DB (ít nhất là trong trường hợp của tôi). Tôi có một tệp .xsd với truy vấn GetRecord trả về một nhóm các bản ghi. Một trong những cột của bảng đó là "nvarchar (512)" và ở giữa dự án tôi cần thay đổi nó thành "nvarchar (MAX)".

Mọi thứ đều hoạt động tốt cho đến khi người dùng nhập hơn 512 trên trường đó và chúng tôi bắt đầu nhận được thông báo lỗi nổi tiếng "Không thể kích hoạt các ràng buộc. Một hoặc nhiều hàng chứa các giá trị vi phạm các ràng buộc không phải là null, duy nhất hoặc khóa ngoài."

Giải pháp: Kiểm tra tất cả thuộc tính MaxLạng của các cột trong DataTable của bạn.

Cột mà tôi đã thay đổi từ "nvarchar (512)" thành "nvarchar (MAX)" vẫn có giá trị 512 trên thuộc tính MaxLạng nên tôi đổi thành "-1" và nó hoạt động !!.


Vấn đề của tôi cũng phải là MaxLpm. Tôi sử dụng thiết kế bộ dữ liệu VWD 2010. Bảng nguồn đã được thay đổi bởi người khác. Tôi đã sửa đổi Truy vấn SQL thành select *, nghĩ rằng sẽ làm mới tất cả các cột, nhưng dường như nó không cập nhật độ dài hiện có. Vì vậy, tôi đã sửa đổi truy vấn để chọn một trường, lưu .xsd, mở .xsd trong Notepad ++ để kiểm tra xem tất cả trừ một trong các lỗi MaxLạng đã biến mất, sau đó sửa lại truy vấn select *. RATNG đã làm mới MaxLạng và đưa tôi vượt qua lỗi này.
Mark Berry

Cảm ơn bạn rất nhiều, tôi đã gãi đầu về điều này cả ngày vì mọi thứ đều được báo cáo tốt. Tôi cũng đã phải đổi thành nvarchar (MAX), nhưng DataTable đã giữ MaxLpm ở mức 10! Tôi nợ bạn một ly!
Jon D

4

Vấn đề là với người thiết kế Data Access. Trong Visual Studio, khi chúng tôi kéo Chế độ xem từ "Máy chủ Explorer" sang cửa sổ Nhà thiết kế, nó sẽ thêm khóa Chính trên cột một cách ngẫu nhiên hoặc đánh dấu thứ gì đó vào KHÔNG NULL mặc dù thực tế nó được đặt thành null. Mặc dù việc tạo Chế độ xem thực tế trong máy chủ db SQL, không có bất kỳ khóa chính nào được xác định hoặc KHÔNG NULL được xác định, trình thiết kế VS đang thêm Khóa / ràng buộc này.

Bạn có thể thấy điều này trong trình thiết kế - nó được hiển thị với một biểu tượng chính ở bên trái của tên cột.

Giải pháp: Nhấp chuột phải vào biểu tượng phím và chọn 'Xóa khóa'. Điều này sẽ giải quyết vấn đề. Bạn cũng có thể nhấp chuột phải vào một cột và chọn "Thuộc tính" để xem danh sách các thuộc tính của một cột trong trình thiết kế truy cập Dữ liệu VS và thay đổi các giá trị một cách thích hợp.


3

Lỗi này cũng đã được hiển thị trong dự án của tôi. Tôi đã thử tất cả các giải pháp được đề xuất được đăng ở đây, nhưng không may mắn chút nào vì vấn đề không liên quan gì đến kích thước trường, định nghĩa trường khóa bảng, các ràng buộc hoặc biến số liệu EnforceConstraint.

Trong trường hợp của tôi, tôi cũng có một đối tượng .xsd mà tôi đặt ở đó trong thời gian thiết kế dự án (Lớp truy cập dữ liệu). Khi bạn kéo các đối tượng bảng cơ sở dữ liệu của mình vào mục trực quan Dataset, nó sẽ đọc từng định nghĩa bảng từ cơ sở dữ liệu cơ bản và sao chép các ràng buộc vào đối tượng Dataset chính xác như bạn đã xác định chúng khi bạn tạo các bảng trong cơ sở dữ liệu của mình (SQL Server 2008 R2 trong tôi trường hợp). Điều này có nghĩa là mọi cột trong bảng được tạo với ràng buộc "không null" hoặc "khóa ngoại" cũng phải có trong kết quả của câu lệnh SQL hoặc thủ tục được lưu trữ của bạn.

Sau khi tôi đưa tất cả các cột chính và các cột được xác định là "không null" vào các truy vấn của mình, vấn đề đã biến mất hoàn toàn.


3

Của tôi bắt đầu hoạt động khi tôi đặt AllowDBNullthành True trên trường ngày trên bảng dữ liệu trong tệp xsd.


2

Có vẻ như có thể một hoặc nhiều cột được chọn với:

   e.eval, e.batch_no, e.crsnum, e.lect_code, e.prof_course

AllowDBNull được đặt thành Sai trong định nghĩa dữ liệu của bạn.


Tôi đặt allow = null cho tất cả các cột trong bảng này nhưng vô ích.
Anyname Donotcare

2

Không rõ tại sao chạy câu lệnh CHỌN phải liên quan đến việc kích hoạt các ràng buộc. Tôi không biết C # hoặc các công nghệ liên quan, nhưng tôi biết cơ sở dữ liệu của Informix. Có điều gì đó kỳ lạ xảy ra với hệ thống nếu mã truy vấn của bạn đang bật (và có lẽ cũng vô hiệu hóa) các ràng buộc.

Bạn cũng nên tránh ký hiệu tham gia Informix OUTER lỗi thời, không chuẩn. Trừ khi bạn đang sử dụng một phiên bản cũ của Informix, bạn nên sử dụng kiểu tham gia SQL-92.

Câu hỏi của bạn dường như đề cập đến hai tham gia bên ngoài, nhưng bạn chỉ hiển thị một trong truy vấn mẫu. Điều đó cũng vậy, là một chút khó hiểu.

Các điều kiện nối giữa ' e' và phần còn lại của các bảng là:

AND c.crsnum = e.crsnum  
AND c.batch_no = e.batch_no  
AND d.lect_code= e.lect_code 

Đây là một sự kết hợp bất thường. Vì chúng ta không có tập hợp con có liên quan của lược đồ với các ràng buộc toàn vẹn tham chiếu có liên quan, nên khó có thể biết điều này có đúng hay không, nhưng có một chút bất thường khi nối giữa 3 bảng như vậy.

Không ai trong số này là câu trả lời dứt khoát cho vấn đề của bạn; tuy nhiên, nó có thể cung cấp một số hướng dẫn.


2

Cảm ơn bạn cho tất cả các đầu vào được thực hiện cho đến nay. Tôi chỉ muốn nói thêm rằng trong khi một người có thể đã bình thường hóa thành công DB, đã cập nhật bất kỳ thay đổi lược đồ nào cho ứng dụng của họ (ví dụ: tập dữ liệu) hoặc do đó, cũng có một nguyên nhân khác: sản phẩm của Cartlian (khi tham gia các bảng trong truy vấn).

Sự tồn tại của kết quả truy vấn cartesian sẽ gây ra các bản ghi trùng lặp trong bảng chính (hoặc khóa đầu tiên) của hai hoặc nhiều bảng được nối. Ngay cả khi bạn chỉ định mệnh đề "Where" trong SQL, Cartesian vẫn có thể xảy ra nếu THAM GIA với bảng phụ chẳng hạn có chứa phép nối không bằng nhau (hữu ích khi lấy dữ liệu từ 2 hoặc nhiều bảng không liên quan):

TỪ tbFirst INNER THAM GIA TbSystem TRÊN tbFirst.reference_str <> tbSystem.systemKey_str

Giải pháp cho việc này: các bảng nên liên quan.

Cảm ơn. chagbert


1

Tôi đã giải quyết vấn đề tương tự bằng cách thay đổi điều này từ sai thành đúng. cuối cùng tôi đã đi vào cơ sở dữ liệu và thay đổi trường bit của mình để cho phép null, sau đó làm mới xsd của tôi, và làm mới wsdl và Reference.cs của tôi và bây giờ tất cả đều ổn.

this.columnAttachPDFToEmailFlag.AllowDBNull = true;

1

Giải pháp ngắn gọn và dễ dàng:

Chuyển đến MSSQL Studio Sever;

Chạy truy vấn nguyên nhân của lỗi này: trong trường hợp của tôi, tôi thấy giá trị id đó là null vì tôi quên đặt tăng thông số nhận dạng bằng 1.

nhập mô tả hình ảnh ở đây

Vì vậy, đã nhập 1 cho trường id vì nó là autoincremane và sửa đổi không cho phép NULLS trong chế độ xem desing

nhập mô tả hình ảnh ở đây

Đó là lỗi gây ra lỗi throwinource và tabel adapter của tôi tại mã này:

   this.exchangeCheckoutReportTableAdapter.Fill(this.sbmsDataSet.ExchangeCheckouReportTable);

0

DirectCast (dt.Rows (0), DataRow) .RowError

Điều này trực tiếp đưa ra lỗi


2
Đề xuất tốt, nhưng nó chỉ hoạt động nếu đó là hàng đầu tiên trong dữ liệu có lỗi, phải không? Nếu 100 hàng tốt được trả về và sau đó 1 hàng xấu, sẽ không có một RowErrorngày Rows(0), sẽ có?
PaulStock

0

Nếu bạn đang sử dụng trình thiết kế bộ dữ liệu phòng thu trực quan để lấy bảng dữ liệu và nó đang gây ra lỗi 'Không thể kích hoạt các ràng buộc'. Tôi đã gặp phải vấn đề tương tự, hãy thử xem trước dữ liệu từ chính nhà thiết kế bộ dữ liệu và khớp nó với bảng bên trong cơ sở dữ liệu của bạn.

Cách tốt nhất để giải quyết vấn đề này là xóa bộ điều hợp bảng và tạo một cái mới thay thế.


0

* Cách thứ hai: *


Nếu bạn không cần [id] làm khóa chính,

Xóa thuộc tính khóa chính của nó:

trên Tập dữ liệu của bạn> BảngAd CHƯƠNG> nhấp chuột phải vào cột [id]> chọn Xóa khóa ...

Vấn đề sẽ được khắc phục.


0

Tôi cũng gặp vấn đề này và nó đã được giải quyết sau khi sửa đổi * .xsd để phản ánh kích thước sửa đổi của cột đã thay đổi trong máy chủ SQL bên dưới.


0

Để khắc phục lỗi này, tôi đã gỡ bỏ bộ điều hợp bảng rắc rối từ nhà thiết kế Dataset và lưu tập dữ liệu, sau đó kéo một bản sao mới của bộ điều hợp bảng từ trình thám hiểm máy chủ và đã sửa nó


0

Tôi đã giải quyết vấn đề này bằng cách mở tệp .xsd bằng trình đọc XML và xóa một ràng buộc được đặt trên một trong các chế độ xem của tôi. Vì bất kỳ lý do gì khi tôi thêm chế độ xem vào dữ liệu, nó đã thêm một ràng buộc khóa chính vào một trong các cột khi không nên có một cột.

Một cách khác là mở tệp .xsd bình thường, nhìn vào bảng / khung nhìn gây ra sự cố và xóa bất kỳ phím nào (cột nhấp chuột phải, chọn delete key) không nên ở đó.


0

Chỉ muốn thêm một lý do có thể khác cho ngoại lệ với những lý do được liệt kê ở trên (đặc biệt đối với những người muốn xác định lược đồ dữ liệu theo cách thủ công):

khi trong tập dữ liệu của bạn, bạn có hai bảng và có một mối quan hệ ( DataSet.Reletions.Add()) được xác định từ trường của bảng thứ nhất ( chfield) với trường của bảng thứ hai ( pfield), giống như một ràng buộc ngầm định được thêm vào trường đó là duy nhất mặc dù nó có thể không được chỉ định rõ ràng như vậy trong định nghĩa của bạn không phải là duy nhất cũng như là khóa chính.

Do đó, nếu bạn có các hàng có giá trị lặp lại trong trường cha đó ( pfield) bạn cũng sẽ có ngoại lệ này.


0
            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

Tôi đã nhận được cùng một loại lỗi và trong trường hợp của tôi, nó đã giải quyết nó bằng cách xóa các trường được chọn và thay thế chúng bằng dấu *. Không biết tại sao nó lại xảy ra. Các truy vấn không có lỗi chính tả hoặc bất cứ điều gì ưa thích.

Không phải là giải pháp tốt nhất nhưng không có gì khác hiệu quả và tôi đã kiệt sức.

Trong quá trình tìm kiếm câu trả lời rõ ràng, tôi đã tìm thấy câu trả lời này: https://www.codeproject.com/questions/45516/fails-to-enable-constraint-one-or-more-rows-cont

Giải pháp 8

Lỗi này cũng xuất hiện trong dự án của tôi, sử dụng Visual Studio 2010. Tôi đã thử các giải pháp khác được đăng trên các blog khác, nhưng không may mắn vì vấn đề không liên quan đến kích thước trường, định nghĩa trường khóa bảng, ràng buộc hoặc EnforceConstraints biến dữ liệu.

Trong trường hợp của tôi, tôi có một đối tượng .xsd mà tôi đặt ở đó trong thời gian thiết kế dự án (trong Lớp truy cập dữ liệu). Khi bạn kéo các đối tượng bảng cơ sở dữ liệu của mình vào mục trực quan Dataset, nó sẽ đọc từng định nghĩa bảng từ cơ sở dữ liệu cơ bản và sao chép các ràng buộc vàoDataset đối tượng chính xác như bạn đã xác định chúng khi bạn tạo các bảng trong cơ sở dữ liệu của mình (SQL Server 2008 R2 trong trường hợp của tôi ). Điều này có nghĩa là mọi cột trong bảng được tạo với ràng buộc "không null" hoặc "khóa ngoại" cũng phải có trong kết quả của câu lệnh SQL hoặc thủ tục được lưu trữ của bạn.

Sau khi tôi đưa tất cả các cột bị ràng buộc (không phải null, khóa chính, khóa ngoại, v.v.) vào các truy vấn của tôi, vấn đề đã biến mất hoàn toàn.

Có lẽ bạn không cần tất cả các cột trong bảng trong kết quả thủ tục truy vấn / lưu trữ, nhưng vì các ràng buộc vẫn được áp dụng nên lỗi được hiển thị nếu một số cột bị ràng buộc không xuất hiện trong kết quả.

Hy vọng điều này sẽ giúp người khác.


-1

Trong trường hợp của tôi, lỗi này được kích thích bởi kích thước của một cột chuỗi. Điều kỳ lạ là khi tôi thực hiện cùng một truy vấn trong công cụ khác nhau, các giá trị lặp lại hoặc giá trị null không có ở đó.

Sau đó, tôi phát hiện ra rằng kích thước của kích thước cột chuỗi là 50 vì vậy khi tôi gọi phương thức điền, giá trị được cắt nhỏ, ném ngoại lệ này.
Tôi bấm vào cột và đặt trong các thuộc tính kích thước thành 200 và lỗi đã biến mất.

Hy vọng điều này giúp đỡ


-1

Tôi đã giải quyết vấn đề này bằng cách thực hiện "subselect" như nó:

string newQuery = "select * from (" + query + ") as temp";

Khi thực hiện trên mysql, tất cả các thuộc tính collunms (duy nhất, không null ...) sẽ bị xóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.