首页 > 解决方案 > Ado.Net DBase 驱动程序使用制表符截断单元格

问题描述

我正在尝试使用 Ado.Net C# 访问旧的 DBase 文件。我成功打开了文件,但表中的一些字符串记录有 TAB 字符,如“一些文本/TABOther 文本”。Ado.Net 驱动程序成功读取“一些文本”并且无法读取其余数据。有没有办法让 Ado.Net 读取单元格的所有内容?

我的连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DATA DIRECTORY;Extended Properties=dBASE IV;User ID=;Password=;";

选择查询:

var sql = "select * from " + "MY_TABLE";
                OleDbCommand cmd = new OleDbCommand(sql, con);
                con.Open();
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                da.Fill(ds);

标签: c#ado.netfoxprodbfdbase

解决方案


我会使用 Microsoft 的 VFPOLEDB 驱动程序。Jet 驱动程序可能对 dBase II 有好处,但对更高版本(如 dBase IV)不可信。

DataTable tbl = new DataTable();
new OleDbAdapter("select * from MY_TABLE",
  "Provider=VFPOLEDB;Data Source=DATA DIRECTORY",
).Fill(tbl);

并确保您之间只有 TAB 字符。虽然 xbase 数据库可以在字符串字段中存储任何字符,但在 C# 中(与文档相反)字符串是 ASCIIZ 字符串,就像在 C 中一样。此外,如果该字符串中有 NEWLINE 字符,在 DataTable 中您可能看不到。

PS:下次尝试发布到 Visual-Foxpro 标签。那个更感兴趣。


推荐阅读