【问题标题】:The INSERT statement conflictedINSERT 语句冲突
【发布时间】:2012-11-06 10:53:07
【问题描述】:

我在 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_Num 的类型为varchar(100),在后面的代码中,我声明int 的类型为BarCode_Num

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

【问题讨论】:

  • 代码中的BarCode_Num 应该是一个字符串
  • 我确实在代码中设置了这个,让我例外:“INSERT 语句与 CHECK 约束“CK_BarCode_Num”冲突。冲突发生在数据库“Parking”、表“dbo.TBL_Cards”、列“ BarCode_Num'。语句已终止。"

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


【解决方案1】:

检查约束是说,无论您插入到 Barcode_Num 中的任何内容,都必须正好是 13 个字符长。

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

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


DATALENGTH

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • !!!!true == true; ... 只是说,你可以不用过多的感叹号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多