如何解决字符串或二进制数据将被截断该语句已终止在数据库表中插入记录时
我的用户定义数据类型如下
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#代码中,我创建了一个datable并确保数据类型与我的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行具有布尔值(两种情况下的内容均为True),但是我的SQL数据类型是bit,这有问题吗?我该如何解决?
解决方法
问题在于字符串,而不是布尔值。有多种可能的原因:
- 您可能正在阅读 Unicode 文本 - 在这种情况下,您应该使用
NVarChar
而不是VarChar
。 - 其中一个字符串比您为其分配的字段长。您需要检查您的数据以确保它可以存储在可用空间中。
您需要检查数据以了解哪一项适用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。