c# - 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);
解决方案
我会使用 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 标签。那个更感兴趣。
推荐阅读
- c - 服务器无法向客户端发送 ump 消息
- android - 在 Kotlin 的 Loader 中声明投影
- angularjs - 如何使用 $http 获取 $http 发布请求的响应数据 - AngularJS
- assembly - 如何使用系统调用打印整数
- c++ - 将数据从线程存储到全局容器的最佳方法?
- c++ - 为什么我必须以这种方式声明指针?
- reactjs - React Lazy Load Image Component 在 Safari 中不起作用
- javascript - addListener 幕后
- javascript - 将数据发送到谷歌电子表格
- unity3d - 我可以在新项目启动时更改默认项目设置吗?