Microsoft.Jet.OLEDB.4.0没有从DBF中检索删除标记的记录

时间:2016-09-22 13:29:41

标签: c# oledb dbf dbase

我使用以下代码从DBF文件中检索数据...

dbfConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"DBASE IV\";Data Source=" + appPath + "test\\sales\\" + DateTime.Now.ToString("yyyyMM") + "\\";
OleDbConnection odconnection = new OleDbConnection(dbfConnectionString);
odconnection.Open();
OleDbCommand oCmdTest = new OleDbCommand("select  * from payment", odconnection);
oCmdTest.ExecuteNonQuery();
oledbDataAdapter = new OleDbDataAdapter(oCmdTest);
oledbDataAdapter.Fill(dataSet);
dataTable = dataSet.Tables[0];

除了没有检索标记为已删除的记录之外,它的工作正常。我能够成功检索已删除的记录VFPOLEDB.1作为提供者并执行一些额外的代码(FoxPro,这是非常好的,但是我给出了一些关于字段格式的问题: - Error reading certain numeric values with VFPOLEDB driver这可以通过转换这些字段来修复,但问题是我的表太大了所以我必须弄清楚并投出许多字段)

OleDbCommand oCmdTest1 = new OleDbCommand("SET DELETED OFF", odconnection);
oCmdTest1.ExecuteNonQuery();

但是这个额外的代码不适用于Microsoft.Jet.OLEDB.4.0。如何从Microsoft.Jet.OLEDB.4.0文件中使用dbf作为提供程序检索已删除的记录?非常感谢任何帮助..

1 个答案:

答案 0 :(得分:0)

好吧,我找不到使用Microsoft.Jet.OLEDB.4.0Microsoft.ACE.OLEDB.12.0来自DBF文件的已删除记录的方法。但是当我使用不同的提供商Advantage OLE DB Provider时,事情就像一个魅力。安装它并引用32位.dll(因为我的解决方案定位于Any Cpu)。连接字符串被修改为..

dbfConnectionString = @"Provider=Advantage.OLEDB.1;User ID=adssys;Data Source=" + appPath + "test\\sales\\" + DateTime.Now.ToString("yyyyMM") + "\\;TableType=ADS_CDX;ShowDeleted=TRUE;Advantage Server Type=ADS_LOCAL_SERVER;";

此处ShowDeleted=TRUE用于包含已删除的记录。