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

数据库 SQL Server
我们那今天主要是向大家讲述的是是在那种情况下会出现SQL Server数据库中SMO备份数据库进度条不显示,以下就是文章的主要内容描述。

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

 

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

 

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

 

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

 

代码如下:

 

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

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

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

又试了另外一段代码

 

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

结果还是不显示。

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

 

 

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

 

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

 

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

【编辑推荐】

  1. C#来对SQL Server存储过程进行创建
  2. SQL Server索引实际结构的理解
  3. 添加Microsoft SQL Server 2000 Desktop Engine
  4. 安装MS SQL Server 2000失败的缘由是什么?
  5. Sql Server 日期格式化之函数GETDATE() 代码

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-06-18 12:52:01

SQL Server

2009-08-18 09:49:00

C# listview

2015-07-31 11:19:43

数字进度条源码

2010-10-22 17:22:05

sql server删

2010-04-14 17:46:10

Oracle数据库

2011-02-22 14:53:41

titlebar标题栏Android

2010-10-22 17:26:55

SQL Server删

2015-01-12 09:30:54

Android进度条ProgressDia

2015-01-12 12:13:03

Android进度条ProgressDia

2010-06-30 10:55:13

SQL Server日

2010-07-13 16:07:26

SQL Server行

2010-07-15 17:28:50

SQL Server

2011-07-05 15:16:00

QT 进度条

2024-08-06 14:29:37

2012-07-31 09:53:33

HTML5进度条

2009-08-17 15:05:41

C#进度条

2023-03-06 07:25:17

LinuxAdvanced

2011-03-29 09:40:31

SQL Server数据库链接

2011-03-28 12:33:09

SQL Server数据库链接

2010-07-22 14:46:41

SQL Server
点赞
收藏

51CTO技术栈公众号