zoukankan      html  css  js  c++  java
  • 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	est.dbf";    //文件路径,如:C:Temp	est.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 

     

  • 相关阅读:
    学习ActiveMQ(五):activemq的五种消息类型和三种监听器类型
    学习ActiveMQ(三):发布/订阅模式(topic)演示
    学习ActiveMQ(二):点对点(队列)模式消息演示
    Linux系统基础优化及常用命令
    【原创】Access自动编号的初始值设置及重置编号
    【整理】引用类型与ref传递实例精解
    【原创】数据库操作类库整理
    【摘录】Random快速产生相同随机数的原因及解决方案
    【整理】辗转相除法求最大公约数算法证明
    【转载】access采用sql语句与msql的区别
  • 原文地址:https://www.cnblogs.com/xuliangxing/p/7690709.html
Copyright © 2011-2022 走看看