【发布时间】:2015-11-29 16:10:01
【问题描述】:
我正在读取 DBF 文件的字段类型。我也在创建 DBF 文件。我正在使用 oledb 阅读器来获取文件类型。阅读器总是返回十进制类型的天气,我设置了 Numeric、Float 或 double。为什么会这样?为什么阅读器返回的类型与 DBF 中存储的类型不同?
【问题讨论】:
我正在读取 DBF 文件的字段类型。我也在创建 DBF 文件。我正在使用 oledb 阅读器来获取文件类型。阅读器总是返回十进制类型的天气,我设置了 Numeric、Float 或 double。为什么会这样?为什么阅读器返回的类型与 DBF 中存储的类型不同?
【问题讨论】:
不同的提供者可以将 DBF 的物理字段类型映射到不同的OLEDB field types。
另一个问题是如果您选择表达式 (select amt * 0.01 from foo) 而不是裸字段并且不将结果显式转换为某种类型 (select cast(amt * 0.01 as currency) from foo),则会出现 SQL 结果类型猜测。同样,在这种情况下,不同的提供者/引擎可能会给出不同的结果;有些 - 像 VFP9 提供程序 - 允许显式转换,有些则不允许。
如果您切换到其他提供商,您可能会获得更好的结果。例如,Visual FoxPro 9.0 OLEDB provider(可免费用于download)映射 Fox DBF 字段类型“I”(整数)、“B”(双)、“Y”(货币)和“N”(数字)忠实于对应的OLEDB/ADO field typesadInteger、adDouble、adCurrency和adNumeric。另一方面,Fox 提供程序只了解与 Clipper 和 dBASE 3 或类似的版本相对应的 Fox 字段类型和遗留 DBF 类型。它无法读取由较新 dBASE 版本生成的表。
一些免费提供的 OLEDB 提供程序了解一些 DBF 方言或其他方言;哪个最合适取决于您的 DBF 文件的类型。
DBF 文件结构相当简单;根据您的应用程序,直接从 DBF 标头中的字段定义中提取元数据可能是有意义的。
【讨论】: