SQL Server SMO备份数据库进度条不显示的原因

数据库 SQL Server
以下的文章主要向大家讲述的是SQL Server SMO备份数据库进度条不显示这一奇怪问题,以及对其实际解决原因的描述。

我们今天主要向大家描述的是SQL Server SMO备份数据库进度条不显示这一问题,假如你在实际操作中遇到相似的情况,但是你却不知道对其如何正确的解决,那么以下的文章对你而言一定是良师益友。

一个奇怪的问题,用SQL Server  SMO备份数据库时不显示进度条,也就是进度条事件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. /// <summary> 
  12.  

备份数据库

  1. /// </summary> 
  2. public void doBackup()  
  3. {  
  4. pbDemo.Value = 0;  
  5. pbDemo.Maximum = 100;  
  6. pbDemo.Style = ProgressBarStyle.Blocks;  
  7. //pbDemo.Step = 10;  
  8. Server srv = new Server(@"(local)");  
  9. Backup backup = new Backup();  
  10. backup.Action = BackupActionType.Database;  
  11. backup.Database = "btnet";  
  12. backup.Incremental = false;  
  13. backup.Devices.Add(new BackupDeviceItem(@"C:\agronet09.bak", DeviceType.File));  
  14. backup.Initialize = true;  
  15. backup.PercentCompleteNotification = 10;  
  16. backup.PercentComplete += new PercentCompleteEventHandler(backup_PercentComplete);  
  17. //backup.Checksum = true;  
  18. backup.SqlBackup(srv);  
  19. }  
  20. public void backup_PercentComplete(object sender, Microsoft.SqlServer.Management.Smo.PercentCompleteEventArgs e)  
  21. {  
  22. this.Invoke(new displayProgress_delegate(displayProgress), e.Percent);  
  23. //Application.DoEvents();  
  24. }  
  25. public delegate void displayProgress_delegate(int progress);  
  26. public void displayProgress(int progress)  
  27. {  
  28. this.lbProgress.Text = "已完成[" + progress.ToString() + " %]";  
  29. pbDemo.Value = progress;  
  30. btnBackup.Enabled = (progress == 100);  
  31. }  

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

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

又试了另外一段代码
 

 

  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备份数据库进度条不显示的介绍,望你能有所收获。

【编辑推荐】

  1. SQL Server数据库中可用格式字符串干什么?
  2. SQL Server 连接字符串的实现步骤
  3. SQL Server 连接字符串的一些声明
  4. SQL Server 字符串在实际操作中的注意事项
  5. MS SQL Server 连接字符串的实际操作简介
责任编辑:佚名 来源: 互联网
相关推荐

2010-07-09 09:34:37

SQL Server数

2010-07-16 10:29:02

SQL Server

2010-11-10 13:54:27

SQL SERVER自

2011-03-24 09:07:11

SQL Server数备份

2010-07-08 11:05:14

SQL Server数

2021-05-17 06:57:34

SQLServer数据库

2011-07-18 15:36:38

定时自动备份SQLServer

2010-09-13 16:46:10

SQL Server触

2009-08-18 09:49:00

C# listview

2015-07-31 11:19:43

数字进度条源码

2011-02-22 14:53:41

titlebar标题栏Android

2010-06-07 14:09:12

mysqldump备份

2010-08-27 09:59:51

SQL Server

2010-10-12 17:23:40

MySQL命令行

2010-07-06 15:07:37

SQL Server

2010-07-15 17:28:50

SQL Server

2009-08-27 14:01:41

C#进度条

2020-03-17 08:29:29

数据库备份技术

2010-05-26 09:01:43

mysqldump备份

2011-03-31 12:55:23

SQL Server备份
点赞
收藏

51CTO技术栈公众号