我正在阅读DBF文件的字段类型。我也在创建DBF文件。我正在使用oledb reader来获取提交类型。 Reader总是返回十进制类型的天气我设置Numeric,Float或double。为什么会这样?为什么读者没有返回与DBF中存储的相同类型?
答案 0 :(得分:1)
不同的提供商可能会将DBF的物理字段类型映射到不同的OLEDB field types。
另一个问题是SQL结果类型guessomatic,如果您选择表达式(select amt * 0.01 from foo
)而不是裸字段,并且不将结果显式地转换为某种类型(select cast(amt * 0.01 as currency) from foo
),则会出现这种情况。同样,在这种情况下,不同的提供者/引擎可能会给出不同的结果;一些 - 比如VFP9提供者 - 允许显式转换,有些则不允许。
如果切换到其他提供商,可能会获得更好的结果。例如,Visual FoxPro 9.0 OLEDB provider - download免费提供 - 映射Fox DBF字段类型'I'(整数),'B'(双),'Y'(货币)和'N '(数字)忠实于相应的OLEDB / ADO field types adInteger
,adDouble
,adCurrency
和adNumeric
。另一方面,Fox提供程序仅了解与Clipper和dBASE 3或其附近对应的Fox字段类型和传统DBF类型。它无法读取由较新的dBASE版本生成的表格。
一些免费提供的OLEDB提供商了解一些DBF方言或其他;哪一个最适合取决于您的DBF文件的类型。
DBF文件结构相当简单;根据您的应用程序,直接从DBF头中的字段定义中提取元数据可能是有意义的。