我通过使用oledbcommand的对象从dBase4数据库获取数据并将其加载到datatable中。但是花费太多时间在5-10分钟内获取160条记录。 请帮帮我。
代码:
using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + TrendFilePath + "\\" + Pathname + ";" + @"Extended Properties=dBASE III;"))
using (OleDbCommand cm = cn.CreateCommand())
{
cn.Open();
for (int L = 0; L <= months; L++)
{
DataTable dt_Dbf = new DataTable();
From_Date = DateTime.ParseExact(frmdate, dateFormat2, provider);
From_Date = From_Date.AddMonths(L);
int month = From_Date.Month;
string year = "1" + From_Date.Year.ToString().Substring(2, 2);
if (L == 0)
{
cm.CommandText = @"SELECT * FROM 128.DBF where DATE_Y ="
+ year + " and DATE_M = " + month + " and DATE_D>=" + From_Day + "";
dt_Dbf.Load(cm.ExecuteReader(CommandBehavior.CloseConnection));
}
}
}
答案 0 :(得分:0)
我怀疑你正在执行的查询是问题所在。除非查询是对大量(数百万/数十亿)数据集进行过滤,否则我不会发现它有问题 - 即使您正在执行这些查询的12(我假设每个月?)。另外,在我写作的时候,你是否计划使用DataTable?对于每个月,您填充表格,然后将其丢弃。 (既然你提到数据库只有~300k,那么查询本身就不可能占用任何重要的时间。)
它可能与网络或文件本身有关。正如我所说,你正在执行12个查询,但在每个查询成功时拆除连接。这意味着您需要建立12个连接,并运行12个查询。您应该调查是否可以为需要执行的查询集维护单个连接。
另一种可能性是锁定。数据库文件是否能够维护多个连接并为不同的用户执行多个查询?我根本不知道dbase产品,但如果它是单用户/单线程,则可能是其他人正在使用数据库并将其锁定一段时间的情况。
尝试将数据库复制到本地计算机,更改连接字符串以引用本地副本,然后再次运行此代码。如果执行时间大大减少,我相信您将能够自信地说存在某种网络问题。从那时起,您(可能)需要寻求组织中某人的帮助。对于12个看似简单的查询,5-10分钟是一个笑话。
如果网络是问题的原因,您可以选择几种方法。