字符串或二进制数据将被截断 - 添加新行(实体框架)

时间:2015-03-10 13:47:22

标签: c# entity-framework

当我尝试添加新行时出现此错误。

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;
}

2 个答案:

答案 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.MinValuereference)来初始化您的属性。