C# - dbf外部表不是预期的格式

时间:2017-02-27 06:37:27

标签: c# oledb visual-foxpro dbf dbase

我在这里挣扎。我试图从dbf文件中获取数据。使用以下连接字符串和代码。

DataTable YourResultSet = new DataTable();
        const string path = "D:\\Sample\\Database\\client.dbf";
        string conStr = String.Format("Provider = Microsoft.Jet.Oledb.4.0; Data Source = {0}; Extended Properties = \"dBase IV\"", Path.GetDirectoryName(path));
        var connection = new OleDbConnection(conStr);
        connection.Open();

        var command = new OleDbCommand(string.Format("select id from {0}", Path.GetFileName(path)), connection);

        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                var str = (string)reader["id"];
            }
        }

        connection.Close();

可以读取很少的dbf文件,并且大多数dbf文件无法获取。执行代码时出现错误“外部表格不符合预期格式。”

即使我使用不同的连接字符串,如vfopledb,vfoledb1,jet,ace等。

我的机器是64位,我正在使用vs2013。请帮帮我。

不要放阴,因为我已经尝试了关于同一问题的所有堆叠过流回答。

1 个答案:

答案 0 :(得分:2)

使用VFPOLEDB驱动程序。 Jet或ACE驱动程序无法识别所有dbf表。 VFPOLEDB驱动程序是32位,这意味着您应该在C#项目(属性/构建目标平台)中定位x86。

void Main()
{
    DataTable YourResultSet = new DataTable();
    string path = @"D:\Sample\Database\client.dbf";

    using (OleDbConnection connection =
    new OleDbConnection("Provider=VFPOLEDB;Data Source=" + Path.GetDirectoryName(path)))
    using (OleDbCommand command = new OleDbCommand(
    string.Format("select id from {0}", Path.GetFileNameWithoutExtension(path)), connection))
    {
    connection.Open();
    YourResultSet.Load(command.ExecuteReader());
    connection.Close();
    }

    Form f = new Form();
    DataGridView dgv = new DataGridView { Dock = DockStyle.Fill, DataSource=YourResultSet};
    f.Controls.Add(dgv);
    f.Show();
}