我正在尝试使用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'不是本地对象,请检查您的网络 连接或联系服务器管理员。
我确信路径和文件名都存在。
有什么问题?
答案 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数据库引擎无法 找到对象文件名。确保对象存在并且您确定 正确拼写其名称和路径名称。