Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 647|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-9-22 15:19
  • 签到天数: 795 天

    [LV.10]以坛为家III

    2050

    主题

    2108

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    724084
    发表于 2021-6-5 20:47:16 | 显示全部楼层 |阅读模式

    前言

      最新项目需要经常和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 

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-10-7 10:45 , Processed in 0.059812 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表