INSERT语句发生冲突

时间:2012-11-18 07:09:16

标签: c# sql database winforms linq-to-sql

我在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)

2 个答案:

答案 0 :(得分:5)

检查约束是指您插入Barcode_Num的内容必须长度为13个字符。

如果您尝试插入长度不超过13个字符的内容,我建议您查阅数据库的文档(或与设置的人员交谈)以了解为什么这个约束已被应用。

我们无法为您解答,我不建议更改检查约束而不理解它为什么存在。


DATALENGTH

  

返回用于表示任何表达式的字节数。

对于varchar,使用的字节数对应于字符数的1-1。对于nvarchar,您需要除以2。

答案 1 :(得分:0)

数据类型与您定义的任何检查约束分开。您可以按照以下说明修改检查约束:http://msdn.microsoft.com/en-us/library/ms191273.aspx

否则,您可以在自己的代码中执行数据验证 - Linq to SQL不会在实体上强制执行,但在您尝试执行违反约束的插入时会抛出SqlException。