C# 打开 DBF 文件

标签 c# .net odbc oledb dbf

我在打开 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 文件设为只读。然而,这会导致“来自外部驱动程序的意外异常”。

所以我的问题是 - 到底是什么?我确定该文件没有损坏,它是从某个数据库直接导出的。 (不,我无权访问该数据库)。我也可以在 MS Office 中打开该文件,没问题。

我无法共享 DBF 文件 - 它包含 secret 数据。

最佳答案

有两件事...仅仅因为它的 .DBF 文件扩展名可能意味着它是 Dbase IV 文件。它实际上可能是 Visual Foxpro 的。也就是说,我会考虑从 Microsoft download 下载和安装 Visual Foxpro OleDB 驱动程序。 .接下来,OleDbConnection 指向具有实际表的路径(您已经有了)。

查询本身不应该关心扩展名,所以我会更改您的调用以通过“Path.GetFileNameWithoutExtension”获取刚刚的名称

可能是两者的结合。

VFP 提供程序的连接字符串

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

关于C# 打开 DBF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997641/

相关文章:

c# - 奇数返回语法语句

c# - 十进制值被识别为 DateTime,而不是从 DateTime.Parse 返回 false

php - 使用 PDO 执行基于另一个查询结果的查询的功能

mysql - 设置MySQL ODBC时出现错误

.net - 使用 common.logging 动态设置 log4net 属性

c++ - 如何在 C++ 中连接到 SQL Server

c# - TDD : Breaks all the existing test cases while refactoring the code

c# - 如何使用 ExecuteSqlCommandAsync

c# - powerpoint 记录排练时间

c# - 如何添加带条件的权限条目?