Visual Fox Pro ODBC 驱动程序(和 OLE DB)出现问题,我用来动态获取 DBF 表的所有列名的代码适用于小型数据集。但是,如果我尝试使用下面的代码获取大型表的表架构,那么获取架构可能需要 60 秒。
OdbcConnection conn = new OdbcConnection(@"Dsn=Boss;sourcedb=u:\32BITBOSS\DATA;sourcetype=DBF;exclusive=No;backgroundfetch=Yes;collate=Machine;null=Yes;deleted=Yes");
OdbcCommand cmd = new OdbcCommand("Select * from " + listBox1.SelectedItem.ToString(), conn);
conn.Open();
try
{
OdbcDataReader reader = cmd.ExecuteReader();
DataTable dt = reader.GetSchemaTable();
listBox2.Items.Clear();
foreach (DataRow row in dt.Rows)
{
listBox2.Items.Add(row[0].ToString());
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
conn.Close();
}
现在我知道这是由于 Select 命令将所有 500,000 条左右的记录拖到数据读取器中,然后它才能提取列名。但是visual fox pro在限制创纪录回报方面相当垃圾。
理想情况下,我希望将返回限制为仅 1 条记录,但假设我不知道任何列名来使用 WHERE 子句,这是行不通的。
VFP 可以使用 TOP SQL 命令,但要做到这一点,您需要一个 ORDER BY 来使用它,而且由于我没有任何列名可以使用,所以这也不起作用。
因此,试图想出一种巧妙的方法来动态获取表模式而不会降低 VFP 的速度,这让我有点难过。
我认为动态数据库转换不会更快。任何人都有任何聪明的想法(除了更改数据库系统,它在工作中被继承,我目前必须使用它:))?