首页 > 代码库 > 项目笔记之一:DBF数据库读取

项目笔记之一:DBF数据库读取

因为现场的数据库用的还是 Visual FoxPro,而自己用的编程语言是C#,不能直接访问,在网上查了不少资料,最后终于在 DRL 找到了一个解决方法,DBF 数据库读取的问题就基本解决了。以下为解决这个问题过程中的一些笔记


 

1. 用 “Provider=Microsoft.Jet.OLEDB.12.0;” 时,提示如下错误:

An unhandled exception of type ‘System.InvalidOperationException‘ occurred in System.Data.dll

Additional information: 未在本地计算机上注册“Microsoft.Jet.OLEDB.12.0”提供程序。

而用 “Provider=Microsoft.ACE.OLEDB.12.0;” 时,则提示如下错误:

An unhandled exception of type ‘System.Data.OleDb.OleDbException‘ occurred in System.Data.dll

Additional information: 找不到可安装的 ISAM。

 

2. 之后根据 DRL 的回帖,用了下面的语句(Provider=VFPOLEDB.1),可以正常导入了。

代码出处:http://stackoverflow.com/questions/22361457/c-sharp-read-from-dbf-files-into-a-datatable

 1 var yourResultSet = new DataTable(); 2  3 var yourConnectionHandler = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=C:\"); 4  5 yourConnectionHandler.Open(); 6  7 if (yourConnectionHandler.State != ConnectionState.Open) return; 8 const string mySql = "select JH,RCYL from dba04 Where JH like ‘7P10%‘"; // JH like ‘7P10%‘ 表示 JH字段中包含 ‘7P10‘,而百分号是模糊查询的意思 9 10 var myQuery = new OleDbCommand(mySql, yourConnectionHandler);11 var da = new OleDbDataAdapter(myQuery);12 13 da.Fill(yourResultSet);14 15 yourConnectionHandler.Close();

经过测试, Visual FoxPro” 和 FoxBASE+/Dbase III plus, 无备注” 这两种格式的数据库,都可以用上面的语句正常导入,太赞了!

 

3. 在 Debug 模式下,Any CPU 和 x86 都可以正常导入;而在 Release 模式下Any CPU 就不能正常导入,需要改成 x86 才可以。因为要考虑到 SQLite 在 XP 机器上的应用,所以研究了一下 x86 的问题,还好测试了一下,果然发现问题了。

 

4. 在 XP 虚拟机中将 Visual FoxPro 卸载之后,再运行程序时提示 “The VFPOLEDB.1 provider is not registered on the local machine.”。重新安装一遍 Visual FoxPro 之后问题消失。

解决方案:最后提供软件的时候附上 Visual FoxPro 的安装程序,简单粗暴。

项目笔记之一:DBF数据库读取