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); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |