C#:使用Microsoft.ACE.OLEDB.12.0连接到dbf文件

时间:2013-04-04 08:49:06

标签: c# oledb

我正在尝试使用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'不是本地对象,请检查您的网络   连接或联系服务器管理员。

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

有什么问题?

1 个答案:

答案 0 :(得分:4)

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

12个字符是不起作用的字符。如果你将它重命名为8个字符,那么它可以正常工作。

The Microsoft Jet database engine could not find the object filename

  

在Microsoft Access中,导入dBase,FoxPro或Paradox文件时   不遵循MS-DOS 8.3文件名格式(即它的   句点前的名称超过八个字符,或者缺少一个   在此期限之后的三个字符扩展名,您可能会收到   以下错误消息:

     

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