显示数据库插入的进度条
本文关键字:数据库 插入 显示 | 更新日期: 2023-09-27 18:17:24
我有一个应用程序,其中用户上传一个包含数百行的Excel文件,当他点击上传时,该文件被转换为DataTable
并发送到数据库,由存储过程插入。上传花费了太多时间,我想显示已插入的行数的进度。有什么办法吗?
List<DataTable> tb = Helper.SplitTableToManyTables(FileTb, 50); // this is a function that split the Main dataTable to several Dt each have 50 rows
int importedRowsCount = 0;
for (int KLoop = 0; KLoop < tb.Count; KLoop++)
{
string[] ContctInfoCols = { "First Name", "Last Name", "Nickname", "Job Title", "Birthday", "Gender", "E-mail Address", "E-mail Address 2", "E-mail Address 3", "Web Page", "Mobile", "Mobile 2", "Mobile 3", "Home Phone", "Home Phone 2", "Business Phone", "Business Phone 2", "Other Phone", "Business Fax", "Home Fax", "Home Street", "Business Street", "Notes", "Company" };//the order of fields is very important
string contact = "";
DataTable resTb = new DataTable("ContactsTb");
resTb.Columns.Add("ContactInfo");
for (int iLoop = 0; iLoop < tb[KLoop].Rows.Count; iLoop++)
{
contact = ";";
DataRow dr = resTb.NewRow();
for (int jLoop = 0; jLoop < ContctInfoCols.Length; jLoop++)
{
if (ContctInfoCols[jLoop] != "" && tb[KLoop].Rows[iLoop][ContctInfoCols[jLoop]].ToString() != "")
contact += (jLoop + 1).ToString() + "~" + tb[KLoop].Rows[iLoop][ContctInfoCols[jLoop]].ToString().Replace("/", "") + ";";
}
dr["ContactInfo"] = contact;
resTb.Rows.Add(dr);
}
if (QueriesDataHelper.ImportContacts(resTb, int.Parse(TxtHiddenGroupId.Value), Session)) // here is the stored procedure call
{
importedRowsCount += resTb.Rows.Count;
var script = "DisplayProgressMsg(" + importedRowsCount + ")";
ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", script, true); // here i am trying to display the currently inserted rows but it's not working
if (KLoop == tb.Count - 1)
MessageBox.Show(importedRowsCount.ToString()+" Contacts imported successfully");
}
//else
// MessageBox.Show("Sorry,an error occured during contacts upload.");
}
function DisplayProgressMsg(msg) {
alert(msg);
}
上传花费太多时间,我想显示已插入的行数的进度。有什么办法吗?
这取决于你如何插入数据。
发送到数据库,由存储过程插入。
如果您使用的是SqlDbType.Structured
参数,您可能会注意到枚举参数的IEnumerable<SqlDataRecord>
值有多远。
如果你每行调用一次存储过程,那么计算一下你到目前为止调用了多少次存储过程。
如果您正在使用SqlBulkCopy
,您可以使用SqlRowsCopied
事件来接收关于插入的行数的反馈。
如果您使用的是SqlDataAdapter
,您可以查看RowUpdated
和RowUpdating
事件。
用别的东西?请阅读详细的手册,了解您可以使用哪些反馈选项。
尽管你可能忽略了真正的问题:
几百行…花太多时间
检查你如何插入行,你应该能够每秒插入数千行,这可以使你需要提供反馈。