如何使用ProgressBar显示将数据加载到DataTable的状态?

时间:2017-12-11 19:25:41

标签: c# odbc

我试图使用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。

我确信有更好的方法来实现这一目标,但我不知道它是什么。任何帮助将不胜感激!

0 个答案:

没有答案