在那种情况下SQLServer数据库中SMO进度条不显示?

此文章主要向大家讲述的是在那种情况下会出现SQL Server数据库中SMO备份数据库进度条不显示,同时存在一个十分奇怪的问题,用SMO备份SQL Server数据库时不显示进度条,也就是进度条事件PercentComplete不触发。

网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;成都做网站、网站建设收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了十余年的成都创新互联公司网站建设公司。

今天试了一下,果然有点奇怪。

一个奇怪的问题,用SMO备份SQL Server数据库时不显示进度条,也就是进度条事件PercentComplete不触发。

今天试了一下,果然有点奇怪。

代码如下:

 
 
 
  1. using Microsoft.SqlServer.Management.Smo;
  2. using Microsoft.SqlServer.Management.Common;
  3. private void btnBackup_Click(object sender, EventArgs e)
  4. {
  5. btnBackup.Enabled = false;
  6. Thread tr = new Thread(new ThreadStart(doBackup));
  7. tr.Priority = ThreadPriority.AboveNormal;
  8. tr.Start();
  9. //Thread.Sleep(3000);
  10. }
  11. /// 
  12. /// 备份数据库
  13. /// 
  14. public void doBackup()
  15. {
  16. pbDemo.Value = 0;
  17. pbDemo.Maximum = 100;
  18. pbDemo.Style = ProgressBarStyle.Blocks;
  19. //pbDemo.Step = 10;
  20. Server srv = new Server(@"(local)");
  21. Backup backup = new Backup();
  22. backup.Action = BackupActionType.Database;
  23. backup.Database = "btnet";
  24. backup.Incremental = false;
  25. backup.Devices.Add(new BackupDeviceItem(@"C:\agronet09.bak", DeviceType.File));
  26. backup.Initialize = true;
  27. backup.PercentCompleteNotification = 10;
  28. backup.PercentComplete += new PercentCompleteEventHandler(backup_PercentComplete);
  29. //backup.Checksum = true;
  30. backup.SqlBackup(srv);
  31. }
  32. public void backup_PercentComplete(object sender, Microsoft.SqlServer.Management.Smo.PercentCompleteEventArgs e)
  33. {
  34. this.Invoke(new displayProgress_delegate(displayProgress), e.Percent);
  35. //Application.DoEvents();
  36. }
  37. public delegate void displayProgress_delegate(int progress);
  38. public void displayProgress(int progress)
  39. {
  40. this.lbProgress.Text = "已完成[" + progress.ToString() + " %]";
  41. pbDemo.Value = progress;
  42. btnBackup.Enabled = (progress == 100);
  43. }

症状如下:结果正确执行,但进度条不显示。

刚开始以为是线程问题,后来发现不是这个原因。

又试了另外一段代码

 
 
 
  1. using Microsoft.SqlServer.Management.Smo;
  2. using Microsoft.SqlServer.Management.Common;
  3. using System.Diagnostics;
  4. static void Main(string[] args)
  5. {
  6. BackupDatabase("ap4\\agronet09", "agronet2008", "c:\\Northind_3.bak");
  7. Console.WriteLine(Environment.NewLine + "Press any key to continue.");
  8. Console.ReadKey();
  9. }
  10. public static void BackupDatabase(string serverName, string databaseName, string fileName)
  11. {
  12. Console.WriteLine("*** Backing up ***");
  13. Server server = new Server(serverName);
  14. Backup backup = new Backup();
  15. backup.Action = BackupActionType.Database;
  16. backup.Database = databaseName;
  17. backup.Incremental = false;
  18. backup.Initialize = true;
  19. backup.LogTruncation = BackupTruncateLogType.Truncate;
  20. BackupDeviceItem backupItemDevice = new BackupDeviceItem(fileName, DeviceType.File);
  21. backup.Devices.Add(backupItemDevice);
  22. backup.PercentCompleteNotification = 10;
  23. backup.PercentComplete += backup_PercentComplete;
  24. backup.Complete +=backup_Complete;
  25. backup.SqlBackup(server);
  26. }
  27. protected static void backup_PercentComplete(object sender, PercentCompleteEventArgs e)
  28. {
  29. Console.WriteLine(e.Percent + "% processed.");
  30. //Application.();
  31. System.Threading.Thread.Sleep(1000);
  32. }
  33. protected static void backup_Complete(object sender, ServerMessageEventArgs e)
  34. {
  35. Console.WriteLine(Environment.NewLine + e.ToString());
  36. }

结果还是不显示。

后来突然想到会不会是文件太小,试了一个200M的数据文件,果然成功显示:

后来经反复实验,发现SQL server 2000约在数据文件加日志文件大于6M左右时显示进度条。

而Sql server 2008 r2大约在3M时显示进度条。可能跟机器也有关系。

以上的相关内容就是对SQL Server数据库中SMO备份数据库进度条的介绍,望你能有所收获。

当前文章:在那种情况下SQLServer数据库中SMO进度条不显示?
文章来源:http://www.hantingmc.com/qtweb/news43/400393.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联