我试图使用ODBC从DBF文件中将大量数据(~1gb)加载到数据表中。这部分有效,我可以正确加载数据。
但是,由于需要一些时间,我想显示一个指示加载状态的进度条。
这是代码:
public void loadMRP(ref Dictionary<string, string> parts)
{
parts = new Dictionary<string, string>();
System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection("Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\\M.DBF;Exclusive=No; NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO;");
conn.Open();
System.Data.Odbc.OdbcCommand oCmd = conn.CreateCommand();
oCmd.CommandText = @"SELECT * FROM c:\M.DBF";
DataTable dt = new DataTable();
dt.Load(oCmd.ExecuteReader());
conn.Close();
using (DataTableReader reader = dt.CreateDataReader())
{
int numParts = dt.Rows.Count;
int c = 0;
do
{
if (!reader.HasRows)
{
MessageBox.Show("Empty DataTableReader");
}
else
{
while (reader.Read())
{
if (!parts.ContainsKey(reader[2].ToString().Trim()))
parts.Add(reader[2].ToString().Trim(), reader[9].ToString().Trim());
}
}
c++;
progBar.Value = 100*(c / numParts);
} while (reader.NextResult());
}
}
我认为这会在填充字典时增加progBar,但progBar值在加载期间保持为0。
我确信有更好的方法来实现这一目标,但我不知道它是什么。任何帮助将不胜感激!