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,这有问题吗?如何解决这个问题?

问题在于字符串,而不是布尔值。有许多可能的原因:

  • 您可能正在阅读Unicode文本-在这种情况下,您应该使用
    NVarChar
    而不是
    VarChar
  • 其中一个字符串比要分配给它的字段长。您需要检查数据,以确保它可以存储在可用空间中

  • 您需要检查数据以确定哪一个适用。

    尝试设置varchar列的MaxLength,直到得到相同的错误:(