2012-11-18 213 views
1

我在C#Winforms 2010中使用SQL Server express和Linq-to-SQL進行項目。我的項目讓我異常:INSERT語句衝突

INSERT語句與CHECK約束「CK_BarCode_Num」衝突。衝突發生於數據庫 「停車場」,臺 「dbo.TBL_Cards」,列 'BarCode_Num'

,當我跑這個查詢:

SELECT name, definition 
FROM sys.check_constraints 
WHERE name = 'CK_BarCode_Num'" 

輸出顯示的定義:

Name: CK_BarCode_Num  
Definition: (datalength([BarCode_Num])=(13))" 

但在數據庫TBL_CardsBarCode_Num類型varchar(100)並在後面的代碼,我宣佈int類型的BarCode_Num

我不知道在哪裏設置datalength([BarCode_Num])=(13)

+0

BarCode_Num在代碼中應該是一個字符串 –

+0

我在代碼中設置了這個,讓我例外:「INSERT語句與CHECK約束衝突」CK_BarCode_Num「。 「Parking」,表「dbo.TBL_Cards」,「BarCode_Num」列。 聲明已終止。「 – user1770370

回答

4

檢查約束是說,無論你插入到Barcode_Num必須是13個字符長。

如果您試圖插入長度不超過13個字符的東西,我建議您參考數據庫的文檔(或與任何設置它的人交談)以瞭解爲什麼此約束已應用。

我們無法爲您解答,我不建議在不理解爲什麼首先存在的情況下更改檢查約束。


DATALENGTH

返回用於表示任何表達式的字節數。

對於varchar,使用的字節數對應於1-1的字符數。對於nvarchar你需要除以2.

0

數據類型與您定義的任何檢查約束是分開的。您可以按照以下指示修改檢查約束:http://msdn.microsoft.com/en-us/library/ms191273.aspx

否則,您可以在自己的代碼中執行數據驗證 - Linq to SQL不會在實體上執行它,但會在您嘗試執行時拋出SqlException違反約束的插入。

+0

但我的我的aql是明確的,沒有管理! – user1770370

+0

'!!!! true == true;'...只是說,你可能沒有過多的驚歎號。 – lukiffer

相關問題