我在C#Winforms 2010中的项目并使用SQL Server express和Linq-to-SQL。我的项目让我异常:
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_Cards
中,BarCode_Num
的类型为varchar(100)
,在代码中,我声明int
类型为BarCode_Num
。
我不知道在哪里设置datalength([BarCode_Num])=(13)
?
答案 0 :(得分:5)
检查约束是指您插入Barcode_Num
的内容必须长度为13个字符。
如果您尝试插入长度不超过13个字符的内容,我建议您查阅数据库的文档(或与设置的人员交谈)以了解为什么这个约束已被应用。
我们无法为您解答,我不建议更改检查约束而不理解它为什么存在。
返回用于表示任何表达式的字节数。
对于varchar
,使用的字节数对应于字符数的1-1。对于nvarchar
,您需要除以2。
答案 1 :(得分:0)
数据类型与您定义的任何检查约束分开。您可以按照以下说明修改检查约束:http://msdn.microsoft.com/en-us/library/ms191273.aspx
否则,您可以在自己的代码中执行数据验证 - Linq to SQL不会在实体上强制执行,但在您尝试执行违反约束的插入时会抛出SqlException。