0

我有一个非常大的表,有 137 个字段。我在 VB 的 Record 对象中为该表构建记录,然后尝试使用 LINQ to SQL 插入它们。但我无法插入记录,因为一个或多个字段太长。当我尝试使用 linq to sql 插入时,出现错误:字符串或二进制数据将被截断。该语句已终止。

我查看了错误消息的详细信息,但找不到哪个字段太长。

为了解决这个问题,我想使用反射循环遍历 Record 对象中每个字段的每个值,然后检查它是否太长。为了做到这一点,我需要以编程方式访问从 linq 到 sql 对象的最大字段长度(所以我知道最大大小是多少)。我怎样才能做到这一点?在给定 linq to sql 对象的 GUI 中,我可以看到每个字段都有一个存储最大值的 serverdatatype 属性。如何使用代码访问它?

4

1 回答 1

2

您必须获取属性的属性并查看DbType任何应用的属性ColumnAttribute以找出“长度”。例如

Account acc = new Account();
ColumnAttribute[] att = acc.GetType().GetProperty("CreditCardNumber").GetCustomAttributes(typeof(ColumnAttribute), false) as ColumnAttribute[];

上面,我有一个 Account 类型(映射到 account 表)和 CreditCardNumber 属性(映射到 CreditCardNumber 列)。此属性具有由 L2S 应用的 ColumnAttribute。

如果ColumnAttribute应用了 a,att上面将包含一个ColumnAttribute对象。DbType您可以通过 'att[0].DbType'找出它是什么。例如,这可能是“NVarChar(100)”。您可以解析它以从中获得 100 个。

更新:

您还可以使用MetaModel与数据上下文关联的对象。例如,如果您已经有一个名为 的数据上下文dbContext,则可以按如下方式获取 DbType:

 dbContext.Mapping.GetTable(typeof (Account)).RowType.GetDataMember(typeof (Account).GetProperty("CreditCardNumber")).DbType;

您仍然需要解析“NVarChar(100)”文本。

于 2012-09-06T15:59:38.077 回答