C# 字符串或二进制数据将被截断。声明已终止。在DB表中插入记录时
我的用户定义数据类型如下C# 字符串或二进制数据将被截断。声明已终止。在DB表中插入记录时,c#,exception,datatable,casting,C#,Exception,Datatable,Casting,我的用户定义数据类型如下 CREATE TYPE [dbo].[CdeSecureList] AS TABLE ( [CardRefID] [int] NOT NULL, [KEY] [varchar](250) NOT NULL, [MIS_Field1] [varchar](60) NULL, [MIS_Field2] [varchar](60) NULL, [ValidatingCarrier] [varchar](2) NOT NULL,
CREATE TYPE [dbo].[CdeSecureList] AS TABLE
(
[CardRefID] [int] NOT NULL,
[KEY] [varchar](250) NOT NULL,
[MIS_Field1] [varchar](60) NULL,
[MIS_Field2] [varchar](60) NULL,
[ValidatingCarrier] [varchar](2) NOT NULL,
[OtherCarriers] [bit] NOT NULL,
[Card Vendor] [varchar](2) NOT NULL,
[Card] [varchar](266) NOT NULL,
[Expiration] [date] NOT NULL,
[Precedence] [int] NULL,
[AlertEmail] [varchar](80) NULL,
[maxTktAmt] [decimal](18, 2) NOT NULL,
[IRP_remark] [bit] NOT NULL
)
在我的C#代码中,我创建了一个数据表,并确保数据类型与我的SQL表匹配
DataTable dtCloned = dtExcel.Clone();
try
{
dtCloned.Columns[0].DataType = typeof(Int32);
dtCloned.Columns[1].DataType = typeof(string);
dtCloned.Columns[2].DataType = typeof(string);
dtCloned.Columns[3].DataType = typeof(string);
dtCloned.Columns[4].DataType = typeof(string);
dtCloned.Columns[5].DataType = typeof(Boolean);
dtCloned.Columns[6].DataType = typeof(string);
dtCloned.Columns[7].DataType = typeof(string);
//dtCloned.Columns[8].DataType = typeof(DateTime);
dtCloned.Columns[9].DataType = typeof(Int32);
dtCloned.Columns[10].DataType = typeof(string);
dtCloned.Columns[11].DataType = typeof(decimal);
dtCloned.Columns[12].DataType = typeof(Boolean);
foreach (DataRow row in dtExcel.Rows)
{
dtCloned.ImportRow(row);
}
}
然而,在插入记录时,我得到了一个错误
字符串或二进制数据将被截断。声明已被终止
我理解这个错误意味着
原因:在表中插入记录时通常会遇到此错误,其中一列是VARCHAR或CHAR数据类型,并且插入的值的长度大于该列的长度
但是我确保了数据类型是相同的,那么为什么会出现错误呢
我的假设是代码中的第5行和第12行具有布尔值(这两种情况下的内容都是真的),但我的SQL数据类型是bit,这有问题吗?如何解决这个问题?问题在于字符串,而不是布尔值。有许多可能的原因:
NVarChar
而不是VarChar
您需要检查数据以确定哪一个适用。尝试设置varchar列的MaxLength,直到得到相同的错误:(