gpt4 book ai didi

c# - 如何在多个sql注入(inject)上添加进度条

转载 作者:行者123 更新时间:2023-11-29 23:30:55 26 4
gpt4 key购买 nike

我一直在尝试在注入(inject)交易中添加进度条,但没有成功。我需要显示在表中插入数据时的百分比。我有多个表和多个插入。我还在多个表上进行循环插入,如使用 ListView 数据的 foreach 语句所示。当我尝试从 ListView 插入 100 条记录时,我的计算机开始出现滞后,并且不知道何时会完成。

任何人都可以告诉我如何做到这一点以及如何将后台工作人员链接到进度栏。

我还需要检查对多个表进行多次更新的 saveEdit() 函数和对多个表进行多次删除的 saveDelete() 函数的进度

我认为如果我将 saveAdd() 代码放在 backgroundWorkerDoWork 函数中,那就太过分了,因为我还需要放置 saveEdit() 和 saveDelete() 函数,它们有很多行代码。

顺便说一句,我使用的是 fbconnection,它与 sqlconnection 功能几乎相同。

private void saveAdd()
{
backgroundWorker.RunWorkerAsync(); // loading bar

DBconnection dbConString = new DBconnection(); //initialize connectDB with connection string
FbConnection dbConnect = new FbConnection(dbConString.getConnectionString()); // connect to database using connectdb
dbConnect.Open(); // open the connection
FbTransaction transaction = dbConnect.BeginTransaction(); // instantiate transaction

backgroundWorker.ReportProgress(10);// loading bar not working

try
{
FbCommand myCommand1 = new FbCommand(getQuerryStrings("insEquipMstDtl"), dbConnect, transaction); //stantiate sql command
myCommand1.Parameters.Add("equipmentid", SqlDbType.BigInt).Direction = ParameterDirection.Output;
myCommand1.ExecuteScalar();// insert into tbl_equipmst or equipmaster
string strDtlequipmentid = myCommand1.Parameters["equipmentid"].Value.ToString();
//MessageBox.Show(strDtlequipmentid);

backgroundWorker.ReportProgress(15);// loading bar not working

FbCommand myCommand2 = new FbCommand(getQuerryStrings("insEquipTransaction", strDtlequipmentid), dbConnect, transaction); //stantiate sql command
myCommand2.Parameters.Add("EQUIPTRANSID", SqlDbType.BigInt).Direction = ParameterDirection.Output;
myCommand2.ExecuteScalar(); // inserts transaction details
string strDtlequiptransid = myCommand2.Parameters["EQUIPTRANSID"].Value.ToString();

backgroundWorker.ReportProgress(20);// loading bar not working

FbCommand myCommand3 = new FbCommand(getQuerryStrings("insEquipWarServDtl", strDtlequipmentid, strDtlequiptransid), dbConnect, transaction); //stantiate sql command
myCommand3.ExecuteNonQuery(); // inserts service warranty in details

backgroundWorker.ReportProgress(25);// loading bar not working

FbCommand myCommand4 = new FbCommand(getQuerryStrings("insEquipWarProdDtl", strDtlequipmentid, strDtlequiptransid), dbConnect, transaction); //stantiate sql command
myCommand4.ExecuteNonQuery(); // inserts product warranty in details

backgroundWorker.ReportProgress(30);// loading bar not working

FbCommand myCommand5 = new FbCommand(getQuerryStrings("insEquipStatDtl", strDtlequipmentid, strDtlequiptransid), dbConnect, transaction); //stantiate sql command
myCommand5.ExecuteNonQuery(); // inserts equipmtn status

backgroundWorker.ReportProgress(35);// loading bar not working

FbCommand myCommand6 = new FbCommand(getQuerryStrings("insEquipLocationDtl", strDtlequipmentid, strDtlequiptransid), dbConnect, transaction); //stantiate sql command
myCommand6.ExecuteNonQuery(); // inserts location

backgroundWorker.ReportProgress(40);// loading bar not working


if (chkParts.Checked == true)
{
if (lvwPartsList.Items.Count !=0 )
{


foreach (ListViewItem item in lvwPartsList.Items)
{
FbCommand myCommand7 = new FbCommand(getPartsQuerryStrings("insEquipMstPart", strDtlequipmentid, item), dbConnect, transaction); //stantiate sql command
myCommand7.Parameters.Add("equipmentid", SqlDbType.BigInt).Direction = ParameterDirection.Output;
myCommand7.ExecuteScalar();// parts insert into tbl_equipmst or equipmaster
string strPartsequipmentid = myCommand7.Parameters["equipmentid"].Value.ToString();

FbCommand myCommand8 = new FbCommand(getPartsQuerryStrings("insEquipTransactionPart", strPartsequipmentid), dbConnect, transaction); //stantiate sql command
myCommand8.Parameters.Add("EQUIPTRANSID", SqlDbType.BigInt).Direction = ParameterDirection.Output;
myCommand8.ExecuteScalar(); // inserts transaction details - parts
string strPartequiptransid = myCommand8.Parameters["EQUIPTRANSID"].Value.ToString();

FbCommand myCommand9 = new FbCommand(getPartsQuerryStrings("insEquipWarServPart", strPartsequipmentid, strPartequiptransid,item), dbConnect, transaction); //stantiate sql command
myCommand9.ExecuteNonQuery(); // inserts service warranty in details - parts

FbCommand myCommand10 = new FbCommand(getPartsQuerryStrings("insEquipWarProdPart", strPartsequipmentid, strPartequiptransid, item), dbConnect, transaction); //stantiate sql command
myCommand10.ExecuteNonQuery(); // inserts product warranty in details - parts

FbCommand myCommand11 = new FbCommand(getPartsQuerryStrings("insEquipStatPart", strPartsequipmentid, strPartequiptransid, item), dbConnect, transaction); //stantiate sql command
myCommand11.ExecuteNonQuery(); // inserts equipmtn status - parts

FbCommand myCommand12 = new FbCommand(getPartsQuerryStrings("insEquipLocationPart", strPartsequipmentid, strPartequiptransid, item), dbConnect, transaction); //stantiate sql command
myCommand12.ExecuteNonQuery(); // inserts equipmtn location - parts

}
}

}
transaction.Commit();

MessageBox.Show("Successful");
frmNormalMode();

}
catch (Exception x)
{
transaction.Rollback();
MessageBox.Show("No Update has been made. Error (" +
x.Message + ")");
}
finally
{
dbConnect.Close();
}
}

最佳答案

您使用BackgroundWorker的方式是错误的。第一步,对您的代码进行以下更改。在创建 BackgroundWorker 时,将 backgroundWorker.WorkerReportsProgress 设置为 True(或者,如果您使用该控件,请在“属性”窗口中将其设置为 true)。接下来,实现 DoWork 事件。它应该包含您的保存代码。同样,您可以在“属性”窗口中使用事件 DoWork。现在它应该如下所示(请注意,我使用了“工具箱”窗口中的控件,因此我将后台工作程序作为表单上的控件):

private bool arePartsChecked;

private List<string> partsList = new List<string>();

private void saveAdd()
{
arePartsChecked = chkParts.Checked;
partsList.Clear();
foreach (ListViewItem item in lvwPartsList.Items)
partsList.Add(item.Text);
backgroundWorker.RunWorkerAsync(); // loading bar
// remove saving code, move it to DoWork event
}

private void backgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
DBconnection dbConString = new DBconnection();
FbConnection dbConnect = new FbConnection(dbConString.getConnectionString());
// part of your code ......
if ((arePartsChecked) && (partsList.Count > 0))
{
foreach (itemList partsList)
{
FbCommand myCommand7 = new FbCommand(getPartsQuerryStrings("insEquipMstPart",
strDtlequipmentid, item), dbConnect, transaction); //stantiate sql command AND note: item is now a string...!!
// etc.
}
// ...
}
finally
{
dbConnect.Close();
}
}

现在实现 private void ProgressChanged 事件。它应该包含如下代码:

private void backgroundWorkerProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}

其中progressBar是表单上的进度条。

关于c# - 如何在多个sql注入(inject)上添加进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com