C# WPF 创建链接到从数据库收集的结果的加载进度条

C# WPF Create Loading Progress Bar linked to Collected results from Database

我正在开发 C# WPF 简单应用程序。此应用程序包含多个要加载的框架,具体取决于数据库。 对于每个 table,我有一个 Frame,所有的都 linked 到主页只是为了导航。我创建了加载框架,其中包含一个简单的进度条。

这是介绍,现在是我的问题。

我想 link ProgressBar 从数据库中收集结果。 例如这个顺序:Select * from Tablename 我希望 ProgressBar 启动,同时收集结果。 我在我的数据库上使用查询,这是我的方法: 这在我的 DataAccessLayer 上:

public static DataTable ExecuteTable(string query, CommandType type, params SqlParameter[] arr)
        {
            SqlConnection cn = new SqlConnection(con);
            cn.Open(); // connection
            SqlCommand cmd = new SqlCommand(query, cn);
            cmd.CommandType = type;
            cmd.Parameters.AddRange(arr);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

我表格上的这个

public static DataTable SP_SELECTALLCATEGORIES()
        {
            DataAccessLayer.Open();
            DataTable dt = DataAccessLayer.ExecuteTable("SP_SELECTALLCATEGORIES", CommandType.StoredProcedure);
            DataAccessLayer.Close();
            return dt;
        }

如果我的 table 包含 1,000,000 条记录,我希望将 ProgressBar link 加载到加载状态,例如当应用程序加载 500,000 时,ProgressBar 应该为 50 %.

我认为原因是当我们引用数据网格或绑定到一个元素时,我们只执行 SQL 语句并且它 returns 带有结果所以我们可以知道这个结果有多少加载了吗?谢谢

结合使用 SQL COUNT() 函数和 DataTable.TableNewRow 事件。每次向您的 table 添加新行时都会触发此事件,您可以使用它来跟踪进度。

首先,获取行数。

SqlCommand countCmd = new SqlCommand(@"SELECT COUNT(column) FROM table;", cn);
int numRows = (int)countCmd.ExecuteScalar();

progressBar.Minimum = 0;
progressBar.Maximum = numRows;

然后,连接 DataTable.TableNewRow 活动以跟踪您的进度。

tb.TableNewRow += (s,e) => progressBar.Value++;
da.Fill(tb);