码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-01-05 23:21:00      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

因为现场的数据库用的还是 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数据库读取

标签:

原文地址:http://www.cnblogs.com/dream4ever/p/4204679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!