修复了当我使用 for 循环还原许多 SQL Server 数据库时卡住的问题
本文关键字:数据库 Server SQL 问题 许多 还原 循环 for | 更新日期: 2023-09-27 18:36:04
我需要在 TreeView 中遍历我的所有数据库,然后选择 TreeNode 作为要还原的数据库名称。如果我只选择 1、2 或 3 个数据库进行还原,我的代码工作正常。但是如果我选择许多数据库,它就会挂起。
请检查我的代码并帮助我..
foreach (TreeNode tn in trvList.Nodes)
{
if (tn.Checked == true)
{
strFileName = GetFileTorestor(strRealdb);//Check File Directory to restore example : C:data'tn.text.
if (strFileName != "")
{
RestoreDatabase(res, tn);
}
else
{
strErorLog += "'r'n -" + tn.Text;
blIsEror = true;
MessageBox.Show("Database " + tn.Text + " has not found!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
/// <summary>
/// Restore database according to treenode selected.
/// </summary>
/// <param name="res"></param>
/// <param name="tn"></param>
private void RestoreDatabase(Restore res,TreeNode tn)
{
res.Database = tn.Text;
res.Action = RestoreActionType.Database;
res.Devices.AddDevice(strFileName, DeviceType.File);
res.ReplaceDatabase = true;
this.pgrRestore.Value = 0;
this.pgrRestore.Maximum = 100;
//res.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
res.PercentCompleteNotification = 5;
res.PercentComplete += new PercentCompleteEventHandler(sqlRestore_PercentComplete);
res.SqlRestore(DBHelper.Server);
stLog += "'r'n " + tn.Text + " from file " + strFileName;//Record database name already restore to log text
txtLog.Text = stLog;
txtLog.Refresh();
}
如果您的意思是卡住 UI 冻结一段时间,那是因为您正在主线程(即 UI 线程)上执行您的工作。无法进行 UI 交互,因为线程正忙于执行您的工作。您应该查看BackgroundWorker
,以便在后台执行工作并向 UI 报告进度。