我的任务是编写几个查询来读取一些 .dbf 文件。这些文件是 Visual FoxPro 文件,这里的大问题是当我开始使用连接时,因为这会使临时文件变得非常大,最终导致如下错误:
File c:\users\me\appdata\local\temp\00001kjd000a.tmp is too large.
此外,查询需要很长时间,这不是我想要的。我尝试使用 sqlserver 和 c# 代码访问这些数据,但速度非常慢。
数据库的大小约为 350mb、100mb 和 10mb。我在本地有这些文件来“加速”这个过程,但是从这些文件中进行三重连接需要超过 15 分钟......
我知道我将不得不使用另一个 2gb
我正在使用的代码:
string connStr = @"Provider=VFPOLEDB.1;Data Source=D:\data\B. Mayer Real\;";
string qryStr = @"
select top 100 *
from db1 a, db2 b, db3 c
where a.id = b.id
and b.id = c.id
order by a.id
";
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand cmd = new OleDbCommand(qryStr, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataSet data = new DataSet();
adapter.Fill(data);
DataTable table = data.Tables[0];
foreach (DataRow myDataRow in table.Rows)
{
Console.WriteLine("Found data {0}", myDataRow[1]);
}
Console.ReadLine();
conn.Close();
编辑:
最大的问题是简单地浏览文件......如果我做这样的事情:
SELECT *
FROM [CARATLOCAL]...[lzarb]
where la_nummer = 364999
这已经需要 30 秒
此查询耗时 38 分钟!(只有一行)
select max(la_datum + convert(datetime, la_time, 108)) as book_datetime, la_nummer, la_index from [CARATLOCAL]...[lzarb]
where la_datum is not null and la_time is not null and la_nummer = 364999
group by la_nummer, la_index