加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

linq-to-sql – “字符串或二进制数据将被截断”.linq异常,找不

发布时间:2020-12-12 16:14:32 所属栏目:MsSql教程 来源:网络整理
导读:字符串或二进制数据将被截断. linq异常,找不到哪个字段超过最大长度. 我有350个字段.我检查每个文本框maxlength与数据库字段maxlength,一切似乎是正确的,但我仍然得到异常. 请帮忙 解决方法 使用350个字段对此错误进行故障排除可能非常困难,在这种情况下,SQL
字符串或二进制数据将被截断. linq异常,找不到哪个字段超过最大长度.

我有350个字段.我检查每个文本框maxlength与数据库字段maxlength,一切似乎是正确的,但我仍然得到异常.

请帮忙

解决方法

使用350个字段对此错误进行故障排除可能非常困难,在这种情况下,SQL Server Profiler不是很有帮助(在生成的SQL中查找长字符串就像在干草堆中找到一个针).

所以,这里是一种自动的方式来查找超出数据库大小限制的实际字符串.这是互联网上的各种形式的解决方案.您可能不希望将其留在生产代码中,因为属性/属性搜索效率非常低,每次保存都会增加额外的开销.当您遇到此问题时,我会将其丢弃在代码中,并在完成后将其删除.

它的工作原理:它迭代您要保存的对象上的所有属性,使用LINQ to SQL ColumnAttribute查找属性.然后,如果ColumnAttribute.DbType包含“varchar”,那么您知道它是一个字符串,您可以解析属性的该部分以查找最大长度.

以下是如何使用它:

foreach (object update in context.GetChangeSet().Updates)
{
    FindLongStrings(update);
}

foreach (object insert in context.GetChangeSet().Inserts)
{
    FindLongStrings(insert);
}

context.SubmitChanges();

这里的方法是:

public static void FindLongStrings(object testObject)
{
    foreach (PropertyInfo propInfo in testObject.GetType().GetProperties())
    {
        foreach (ColumnAttribute attribute in propInfo.GetCustomAttributes(typeof(ColumnAttribute),true))
        {
            if (attribute.DbType.ToLower().Contains("varchar"))
            {
                string dbType = attribute.DbType.ToLower();
                int numberStartIndex = dbType.IndexOf("varchar(") + 8;
                int numberEndIndex = dbType.IndexOf(")",numberStartIndex);
                string lengthString = dbType.Substring(numberStartIndex,(numberEndIndex - numberStartIndex));
                int maxLength = 0;
                int.TryParse(lengthString,out maxLength);

                string currentValue = (string)propInfo.GetValue(testObject,null);

                if (!string.IsNullOrEmpty(currentValue) && maxLength != 0 && currentValue.Length > maxLength)
                    Console.WriteLine(testObject.GetType().Name + "." + propInfo.Name + " " + currentValue + " Max: " + maxLength);

            }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读