2

我正在尝试使用 Microsoft.ACE.OLEDB.12.0 提供程序连接到 64 位操作系统中的 dbf 文件。

我写

   [Test]
    public void CustomDbfReader()
    {
        string filepath = @"K:\data";

        var dataTable = new DataTable();

        string connectionString =
            "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=dBASE IV;Data Source='" + filepath +"'" ;

        using (var oledbConnection = new OleDbConnection(connectionString))
        {
            oledbConnection.Open();
            string stringCommadn = string.Format(@"select * from filename.dbf");
            var oleDbCommand = new OleDbCommand(stringCommadn, oledbConnection);
            var oleDbDataAdapter = new OleDbDataAdapter
                                       {
                                           SelectCommand = oleDbCommand
                                       };
            oleDbDataAdapter.Fill(dataTable);
        }
        Assert.IsNotEmpty(dataTable.Rows);
    }

我得到了这个例外

System.Data.OleDb.OleDbException:Microsoft Access 数据库引擎找不到对象“CardifOrigin.dbf”。确保对象存在并且正确拼写其名称和路径名。如果“CardifOrigin.dbf”不是本地对象,请检查您的网络连接或联系服务器管理员。

我确信路径和文件名都存在。

有什么问题?

4

1 回答 1

5

名称的 dbase 规则强制最大值为10 characters. 在 Approach 中,有关较长名称的信息存储在 Microsoft 不知道的特殊索引中。

12 个字符的一个是行不通的。如果将其重命名为 8 个字符,则可以正常工作。

Microsoft Jet 数据库引擎找不到对象文件名

在 Microsoft Access 中,当您导入不遵循 MS-DOS 8.3 文件名格式的 dBase、FoxPro 或 Paradox 文件时(即,句点前的名称超过八个字符,或者在期间),您可能会收到以下错误消息:

Microsoft Jet 数据库引擎找不到对象文件名。确保对象存在并且正确拼写其名称和路径名。

于 2013-04-04T09:01:41.520 回答