【问题标题】:Microsoft.Jet.OLEDB.4.0 not retrieving delete marked records from DBFMicrosoft.Jet.OLEDB.4.0 未从 DBF 检索删除标记的记录
【发布时间】:2016-09-23 17:03:52
【问题描述】:

我正在使用以下代码从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。如何从dbf 文件中检索以Microsoft.Jet.OLEDB.4.0 作为提供者的已删除记录?任何帮助都非常感谢..

【问题讨论】:

  • 试试这个,然后不要使用修改后的 OleDbCommand。 dbfConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"DBASE IV;Deleted=0\";Data Source=" + appPath + "test\\sales\\" + DateTime.Now.ToString(" yyyyMM") + "\\";
  • 它不工作,但没有错误..
  • 也试过Microsoft.ACE.OLEDB.12.0

标签: c# oledb dbf dbase


【解决方案1】:

好吧,我找不到从DBF 文件中读取带有Microsoft.Jet.OLEDB.4.0Microsoft.ACE.OLEDB.12.0 的已删除记录的方法。但是当我使用不同的提供商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用于包含已删除的记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多