当我尝试添加新行时出现此错误。
HexStringToByteArray("0x546F206A65737420707573747920706C696B0D0A");
字符串或二进制数据将被截断。\ r \ n语句已被删除 终止。
attachement.ATF_ID = 244512;
attachement.ATF_WFDID = 160489;
attachement.ATF_ATTID = 244512;
attachement.ATF_Name = "teska14.txt";
attachement.ATF_FileType = ".txt";
attachement.ATF_Value = HexStringToByteArray("0x546F206A65737420707573747920706C696B0D0A");
attachement.ATF_FileIsOcr = 0;
attachement.ATF_CreatedBy = "test";
attachement.ATF_UpdatedBy = "test";
attachement.ATF_OrginalValueHash = HexStringToByteArray("0x4C35C01D7E10FB7F7440D39932265E7C7F09A4D17FEFB55AE9E1DDAC97AD373E");
attachement.ATF_OrginalName = "test.txt";
attachement.ATF_Version = -1;
context2.WFAttachmentFiles.AddObject(attachement);
//context.AddToWFAttachmentFiles(attachement);
//context.WFAttachmentFiles.AddObject(attachement);
context2.SaveChanges();
HEC代码:
public static byte[] HexStringToByteArray(string hexString)
{
if (string.IsNullOrWhiteSpace(hexString))
throw new ArgumentNullException("hexString");
if (hexString.Length % 2 != 0)
throw new Exception("Invalid hex string");
var bytes = new byte[hexString.Length / 2];
for (int i = 2; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return bytes;
}
答案 0 :(得分:4)
通常当您看到错误消息时:
字符串或二进制数据将被截断。声明已经终止。
这意味着其中一个数据库列不足以容纳您尝试保存的数据。
在您的情况下,检查数据库中 ATF_OrginalValueHash 和 ATF_Value 列的大小,并可能增加它们
答案 1 :(得分:3)
基本思想是确保实体属性是否转换为兼容的sql列。
另一个解决方案是使用LINQPad,如果您将代码放在那里,它将向您显示实体框架触发的SQL语句,并为您提供足够的洞察力,以找出代码失败的原因。
通常,当您未初始化实体的DateTime
属性并尝试将更改保存到SQL Server数据库时,会显示此错误。
所有c#DateTime属性都初始化为0001年1月1日,这是type的最小值。
Sql Server中日期时间数据类型的最小值为January 1, 1753。
这导致超出范围的例外。如果您相应地初始化DateTime
属性,则不应该看到此错误。如果适用于您的方案,您还可以考虑使用SqlDateTime.MinValue
(reference)来初始化您的属性。