1

我在 C# Winforms 2010 中的项目并使用 SQL Server express 和 Linq-to-SQL。我的项目让我例外:

INSERT 语句与 CHECK 约束“CK_BarCode_Num”冲突。冲突发生在数据库“Parking”、表“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_Numvarchar(100),在后面的代码中,我声明int类型为BarCode_Num.

不知道在哪里设置datalength([BarCode_Num])=(13)

4

2 回答 2

5

检查约束是说您插入的任何内容Barcode_Num都必须恰好是 13 个字符长。

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

我们无法为您回答这个问题,我不建议在不了解它为什么存在的情况下更改检查约束。


DATALENGTH

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

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

于 2012-11-18T07:36:53.170 回答
0

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

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

于 2012-11-18T07:14:55.907 回答