字符串或二进制数据将被截断。该声明已终止。
System.Data.SqlClient.SqlException(0x80131904):字符串或二进制数据将被截断
当 C#(模型)尝试保存 SQL SERVER 数据库表中定义的大小较小的列的数据记录时抛出此异常,其中传递给该列字符串长度的值较大。
要修复此错误,您只需使用 SQL Server 脚本更改 SQL SERVER 数据库中的表列即可。
仅增加表中列的大小即可。无需在 PROD/TEST 环境中重新部署应用程序。
请参考下面的示例。
CREATE TABLE MyTable(Num INT, Column1 VARCHAR(3))
INSERT INTO MyTable VALUES (1, 'test')
查看第 1 列,其大小为 3,但给定值的长度为 4,因此您会收到错误。
修复错误:
您应该传递小于或等于其大小的字符串值,即 3 个字符,如下所示。
INSERT INTO MyTable VALUES (1, 'tes')
如果你想抑制这个错误
您可以将以下 ansi_warnings 参数设置为关闭
SET ansi_warnings OFF
如果我们使用 ansi_warnings 作为 OFF,错误将被抑制,并且任何可以放入列中的内容都将被插入,其余的将被截断。
INSERT INTO MyTable VALUES (1, 'test')
字符串“tes”将存储在您的表中,并且不会返回任何错误。
我知道这是一个老问题,但我收到了相同的错误消息,而且根本原因对我来说是不同的,所以我将发布我的解决方案,以防其他人遇到同样的问题。
在我的应用程序代码中,我将项目添加到数据表中,如下所示:
table.Rows.Add(myObj);
我需要做的是这样添加:
table.Rows.Add(myObj.Property1, myObj.Property2, myObj.Property3);
更改应用程序代码后,错误消息消失,我能够插入数据库。