打开DBF文件

本文关键字:文件 DBF 打开 | 更新日期: 2023-09-27 18:13:11

我在打开DBF文件时遇到了问题-我需要打开它,读取所有内容并处理它。我尝试了几种解决方案(ODBC/OLEDB),几种连接字符串,但到目前为止没有任何效果。

问题是,当我执行SQL命令从文件中获取所有内容时,没有返回任何内容-没有行。更奇怪的是,打开的DBF文件的内容被删除了。

查看我的代码:

public override bool OpenFile(string fileName, string subFileName = "")
{
    OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(fileName) + ";Extended Properties=dBASE IV;User ID=;Password=;");
    try
    {
        if (con.State == ConnectionState.Closed) { con.Open(); }
        OleDbDataAdapter da = new OleDbDataAdapter("select * from " + Path.GetFileName(fileName), con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        con.Close();
        int i = ds.Tables[0].Rows.Count;
        return true;
    }
    catch
    {
        return false;
    }             
}

我调试了代码,看着文件在Windows资源管理器中被打开。当它到达这一行时:

da.Fill(ds);

文件大小减少到只有几个字节(从几百kB)。

我的下一个想法是使DBF文件只读。然而,这会导致"来自外部驱动程序的意外异常"。

所以我的问题是——到底是怎么回事?我确信该文件是不是损坏,它是从一些DB直接导出的。(不,我没有访问数据库)。我也可以在MS Office中打开那个文件。

我不能共享DBF文件-它包含机密数据

打开DBF文件

两件事…仅仅因为它是一个。dbf文件扩展名可能意味着它是一个数据库IV文件。它实际上可能是Visual Foxpro。也就是说,我会考虑从微软下载下载并安装Visual Foxpro OleDB驱动程序。接下来,OleDbConnection指向包含实际表的路径(已经有了)。

查询本身,不应该关心扩展名,所以我将更改您的调用,通过"Path"获取名称。GetFileNameWithoutExtension "

它可能是两者的组合。

VFP提供程序的连接字符串

"Provider=VFPOLEDB.1;Data Source=" + FullPathToDatabase

这不是确切的答案,但它将帮助您找到问题。

尝试给出一个内联连接字符串并选择查询以确保问题不是与构建这些。捕获异常并检查其详细信息。

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:'folder;Extended Properties=dBASE IV;User ID=;Password=;"); // give your path directly 
try
{
    con.Open();
    OleDbDataAdapter da = new OleDbDataAdapter("select * from tblCustomers.DBF", con); // update this query with your table name 
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
    int i = ds.Tables[0].Rows.Count;
    return true;
}
catch(Exception e)
{
    var error = e.ToString();
    // check error details 
    return false;
}