C# 解决读取dbf文件,提示Microsoft Jet 数据库引擎找不到对象的问题

前言

  最新项目需要经常和dbf文件打交道,在实际场景中很多软件需要和一些老的系统进行数据交互,而这些系统都在使用foxpro数据库,读取dbf文件一般都是分为两种情况:第一;安装foxpro的驱动进行读取,第二;不安装驱动,使用ODBC进行读取。

  具体如何设置DBF / FoxPro连接字符串,可以参考一下这篇文章(https://www.connectionstrings.com/dbf-foxpro/

方案一:安装foxpro驱动

  可以到微软官网(https://www.microsoft.com/en-us/download/details.aspx?id=14839)下载文件“VFPOLEDBSetup.msi”进行安装。再使用代码读取,如下所示:

 1             string filePath = @"C:\Temp\test.dbf";    //文件路径,如:C:\Temp\test.dbf
 2             FileInfo fileInfo = new FileInfo(filePath);
 3             string directoryName = fileInfo.DirectoryName;  //文件夹目录
 4             string fileName = fileInfo.Name;
 5 
 6             OleDbConnection conn = new OleDbConnection();
 7             string connStr = @"Provider=VFPOLEDB.1;Data Source=" + directoryName + ";Collating Sequence=MACHINE";
 8             conn.ConnectionString = connStr;
 9             conn.Open();
10 
11             string strSql = @"SELECT * FROM " + fileName;
12             OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
13             DataTable dt = new DataTable();
14             da.Fill(dt);

方案二:不安装驱动,使用ODBC读取

 1         private void button1_Click(object sender, EventArgs e)
 2         {
 3             try
 4             {
 5                 string directoryPath = @"C:\Temp";//存放的dbf文件夹目录。
 6                 string fileName = @"test.dbf";//dbf的文件名,这里比如是test.dbf 因为这里做为表名,所以后缀.dbf可以省略,直接是test也可以的。
 7                 string strConn = @"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" + directoryPath;
 8 
 9                 System.Data.Odbc.OdbcConnection odbcConn = new System.Data.Odbc.OdbcConnection();
10                 odbcConn.ConnectionString = strConn;
11                 odbcConn.Open();
12 
13                 string strSql = @"SELECT * FROM " + fileName;
14 
15                 OdbcDataAdapter oda = new OdbcDataAdapter(strSql, odbcConn);
16                 DataTable dt = new DataTable();
17                 oda.Fill(dt);
18 
19                 dataGridView1.DataSource = dt;
20                 odbcConn.Close();
21             }
22             catch (Exception ex)
23             {
24                 MessageBox.Show(ex.Message);
25             }
26         }

ODBC读取异常问题

  实际过程当中,我们经常会碰到一个问题即:提示Microsoft Jet 数据库引擎找不到对象的问题

  但是!检测了N遍,名称和路径都是没有错的,网上也查了很多相关资料,但是都没有得到解决(问题是一样,但是解决方案无效)。经过反复测试,终于发现问题的所在:dbf文件名不能超过8个字符,一旦超过8个字符,就会报这样的错。(为什么会这样不得而知~%>_<%)

  解决方法:将dbf文件名控制在8个字符以内,暂时找不到更好的办法

 

PS:如有疑问,请留言,未经允许,不得私自转载,转载请注明出处:http://www.cnblogs.com/xuliangxing/p/7690709.html 

 

posted @ 2017-10-19 09:28  法号阿兴  阅读(4114)  评论(4编辑  收藏  举报