获取 DBF 文件的字段类型
get fieldtype of DBF File
我正在读取 DBF 文件的字段类型。我也在创建 DBF 文件。我正在使用 oledb reader 来获取文件类型。 Reader 始终 return 小数类型天气我设置数字、浮点数或双精度。为什么会这样?为什么 reader 与 DBF 中存储的类型不同 return?
不同的提供商可能会将 DBF 的物理字段类型映射到不同的 OLEDB field types。
另一个问题是 SQL 结果类型猜测,如果你 select 表达式(select amt * 0.01 from foo
)而不是裸字段并且不明确地将结果转换为某种类型( select cast(amt * 0.01 as currency) from foo
)。同样,在这种情况下,不同的 providers/engines 可能会给出不同的结果;有些——比如 VFP9 提供者——允许显式转换,有些则不允许。
如果您切换到其他提供商,您可能会获得更好的结果。例如,Visual FoxPro 9.0 OLEDB provider - which is freely available for download - maps the Fox DBF field types 'I' (integer), 'B' (double), 'Y' (currency) and 'N' (numeric) faithfully to the corresponding OLEDB/ADO field types、adInteger
、adDouble
、adCurrency
和 adNumeric
。另一方面,Fox 提供者只理解 Fox 字段类型和与 Clipper 和 dBASE 3 或其附近对应的遗留 DBF 类型。它无法读取较新的 dBASE 版本生成的表。
一些免费提供的 OLEDB 提供者了解一些 DBF 方言或其他方言;哪一个最合适取决于您的 DBF 文件的类型。
DBF 文件结构相当简单;根据您的应用程序,直接从 DBF header.
中的字段定义中提取元数据可能是有意义的
我正在读取 DBF 文件的字段类型。我也在创建 DBF 文件。我正在使用 oledb reader 来获取文件类型。 Reader 始终 return 小数类型天气我设置数字、浮点数或双精度。为什么会这样?为什么 reader 与 DBF 中存储的类型不同 return?
不同的提供商可能会将 DBF 的物理字段类型映射到不同的 OLEDB field types。
另一个问题是 SQL 结果类型猜测,如果你 select 表达式(select amt * 0.01 from foo
)而不是裸字段并且不明确地将结果转换为某种类型( select cast(amt * 0.01 as currency) from foo
)。同样,在这种情况下,不同的 providers/engines 可能会给出不同的结果;有些——比如 VFP9 提供者——允许显式转换,有些则不允许。
如果您切换到其他提供商,您可能会获得更好的结果。例如,Visual FoxPro 9.0 OLEDB provider - which is freely available for download - maps the Fox DBF field types 'I' (integer), 'B' (double), 'Y' (currency) and 'N' (numeric) faithfully to the corresponding OLEDB/ADO field types、adInteger
、adDouble
、adCurrency
和 adNumeric
。另一方面,Fox 提供者只理解 Fox 字段类型和与 Clipper 和 dBASE 3 或其附近对应的遗留 DBF 类型。它无法读取较新的 dBASE 版本生成的表。
一些免费提供的 OLEDB 提供者了解一些 DBF 方言或其他方言;哪一个最合适取决于您的 DBF 文件的类型。
DBF 文件结构相当简单;根据您的应用程序,直接从 DBF header.
中的字段定义中提取元数据可能是有意义的