当我阅读一个巨大的FoxPro.DBF时,我如何使用VFPOLEDB提供程序来使用.NDX/.CDX索引

本文关键字:程序 VFPOLEDB 何使用 CDX 索引 NDX 一个 DBF FoxPro 巨大 | 更新日期: 2023-09-27 18:20:44

我正在用C#编写一个.NET应用程序,该应用程序使用Visual FoxPro OLE DB访问接口(VFPOLEDB.1)读取FoxPro.DBF。

问题是.DBF是900MB,所以与FoxPro的即时读取(我们使用DOS FoxPro)相比,简单的读取花费的时间太长了。提供程序和原生FoxPro搜索之间的区别在于,我假设FoxPro使用索引文件(我们使用.CDX和.NDX),并且提供程序使用给定的SQL语句进行线性搜索。

public DataTable getData(string refNum = "TESTREFNUM")
{
    DataTable result = new DataTable();
    OleDbConnection connection = new OleDbConnection(
            "Provider=VFPOLEDB.1;Data Source=C:''PATH''TO''DBFFILES'';Exclusive=No");
        connection.Open();
        if (connection.State == ConnectionState.Open)
        {
            string mySQL = "SELECT DP_PRO, DP_FILE, DP_NUM"
                + "FROM DISPATCH"                           // 900MB dispatch.dbf
                + "WHERE DP_PRO LIKE '%" + refNum + "%'";
            OleDbCommand MyQuery = new OleDbCommand(mySQL, connection);
            OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);
            DA.Fill(result);
            connection.Close();
        }
    return result;
}

因此,从我的研究中,我看到了对.CDX文件比.NDX文件更多的支持,这很好。但是,除了默认的缓慢搜索文件外,我如何设置OleDConnection以利用索引呢?

我必须对SQL语句进行任何更改吗?还是提供者?或者要更改DBF文件上的设置?从研究中,我还发现.CDX引用位于.DBF文件的头中,因此提供者知道哪些.CDX文件是相关联的应该不会有问题。

如有任何帮助,我们将不胜感激。我刚毕业,没有FoxPro的工作经验p

当我阅读一个巨大的FoxPro.DBF时,我如何使用VFPOLEDB提供程序来使用.NDX/.CDX索引

在复合索引(CDX)方面,您需要确保查询得到Rushmore优化。这就是您所需要做的一切——如果有问题的表存在CDX(如DBF的头部所示),那么它将被自动使用。查看上面的示例,因此假设字段DP_PRO上没有索引标记。

VFPOLEDB提供程序根本不支持索引。