1

C#Winforms 2010での私のプロジェクトでは、SQLServerExpressと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_Numisvarchar(100)であり、コードビハインドでは、intタイプを宣言しBarCode_Numます。

どこに設定されているのかわかりませんdatalength([BarCode_Num])=(13)か?

4

2 に答える 2

5

チェック制約は、挿入するものBarcode_Numはすべて正確に13文字の長さでなければならないと言っています。

13文字以外のものを挿入しようとしている場合は、データベースのドキュメントを参照して(または、データベースを設定した人に相談して) 、この制約が適用されている理由を理解することをお勧めします。

私たちはあなたのためにそれに答えることはできません、そして私はそれがそもそも存在する理由を理解せずにチェック制約を変更することをお勧めしません。


DATALENGTH

式を表すために使用されるバイト数を返します。

の場合varchar、使用されるバイト数は1〜1の文字数に対応します。あなたはnvarchar2で割る必要があるでしょう。

于 2012-11-18T07:36:53.170 に答える
0

データ型は、定義したチェック制約とは別のものです。次の手順に従って、チェック制約を変更できます。http: //msdn.microsoft.com/en-us/library/ms191273.aspx

それ以外の場合は、独自のコードでデータ検証を実行できます。Linqto SQLはエンティティにデータ検証を強制しませんが、制約に違反する挿入を実行しようとするとSqlExceptionをスローします。

于 2012-11-18T07:14:55.907 に答える