我有一个 ms-access 文件,其中有一些表是通过在 db 文件中的其他表上使用连接生成的。其中一个表(称为“Pin_Codes”)在脚本中有一个访问“IIf”条件来填充该列。相同的 SQL 脚本如下。
SELECT TableA.POSTCODE AS PINCODE,
IIf([tableC_column] IS NOT NULL, [tableC_column], Iif([tableB_column] IS NOT NULL, [tableB_column], "NA")) AS DISTRICT
FROM (TableA
LEFT JOIN [tableB]
ON TableA.POSTCODE = [tableB].Postcode)
LEFT JOIN [tableC]
ON TableA.POSTCODE = [tableC].Postcode_Final;
所以表 Pin_Codes 中有 2 列名为 PINCODE(类型字符串)和 DISTRICT(类型字符串)
我在我的应用程序中导入了这个访问文件,它首先检查 accdb 文件中所有表的模式。但是当它得到 Pin_Codes 的模式时,DISTRICT 列的 max_length 大约为 577346(应该是 255,因为它是字符串类型)。PINCODE 的 max_length 可以达到 255。
即使是一个虚拟的 IIf 条件(始终具有真条件和相同的真假部分)也会产生此错误。此外,删除 DISTRICT 列的 IIf 条件(并用 tableB_column 或“NA”填充它)解决了这个问题,长度值变为 255。
我验证了源表 TableA、tableB 和 tableC 的架构,应用程序正在正确解释这些架构。
这个问题的原因可能是什么,有什么办法(除了取消“IIf”条件)来克服这个问题吗?
注意 使用 System.Data.DataTable.GetSchemaTable()、OleDB 函数来获取架构表和 JetOLEDB4.0 dll 获得并测试了 shema