C# 显示DataAdapter.Update()的进度会使其运行速度加倍。有什么建议吗?

C# 显示DataAdapter.Update()的进度会使其运行速度加倍。有什么建议吗?,c#,sql,database,multithreading,backgroundworker,C#,Sql,Database,Multithreading,Backgroundworker,我使用DataAdapter.Update()命令从数据集中获取任何更改,并将它们推送到本地sql数据库中 为了显示进度,我使用“DataAdapter.RowUpdated+=DataAdapter\u RowUpdated;” 因此,每更新一行,DataAdapter_RowUpdated函数都会启动。虽然它更新数据库的速度是原来的两倍(更新50000条记录需要2:22分钟,没有它,需要1:04分钟) 有没有办法不让事情慢下来 public MainWindow() { objDat

我使用DataAdapter.Update()命令从数据集中获取任何更改,并将它们推送到本地sql数据库中

为了显示进度,我使用“DataAdapter.RowUpdated+=DataAdapter\u RowUpdated;”

因此,每更新一行,DataAdapter_RowUpdated函数都会启动。虽然它更新数据库的速度是原来的两倍(更新50000条记录需要2:22分钟,没有它,需要1:04分钟)

有没有办法不让事情慢下来

public MainWindow()
{
    objDataAdapter.RowUpdated += ObjDataAdapter_RowUpdated;
}

//Updating database from DataSet
private void BgWorkerWriteDB_DoWork(Object sender, DoWorkEventArgs e)
{
    //This divides 100 by the number of rows to update so It adds that number every iteration.
    var chData = objDataSet.Tables[0].GetChanges();
    if (chData != null)
    {
        percentagePass = 100 / (decimal)chData.Rows.Count;
    }

    SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(objDataAdapter);
    objDataAdapter.SelectCommand = new SqlCommand("SELECT * FROM ActiveInactive", objCon);
    objDataAdapter.Update(objDataSet);
}

//Firing every updated row
private void ObjDataAdapter_RowUpdated(object sender, SqlRowUpdatedEventArgs e)
{
    decimal temp = progress;
    progress += (decimal)percentagePass;
    if (progress > temp)
    {
        lblProgressDB.Dispatcher.Invoke(() => lblProgress.DB.Content = ((int)progress + "%").ToString());
    }
}
找到了解决方案,if语句需要对整数而不是小数进行取整和检查。


更新的事件处理程序中有什么?每次调用运行需要多长时间?每次更新数据库中的一行时,\u RowUpdated被提升。它在中间被提升,所以对于50000条记录,它执行50000次。这不是我所要求的。我知道
RowUpdated
事件是如何工作的,我想问您的
ObjDataAdapter\u RowUpdated
事件处理程序中实际有什么内容,运行需要多长时间?您已经用注释将其隐藏在代码列表中。除非您已经知道每次调用它需要多长时间,否则这里的内容可能是您问题的答案。我刚刚添加了处理程序中正在发生的事情。我猜您的进度条更新太多了。很难说清楚,因为数据类型和值在您向我们展示的内容中并不明显,但有可能
(progress>temp)
测试总是通过,因此您要更新进度条50000次。
if ((int).progress > (int).temp)