SQL Server中SMO备份数据库进度条不显示?

邢少提到一个奇怪的问题,用SMO备份数据库时不显示进度条,也就是进度条事件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 );

        }

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

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

又试了另外一段代码

  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());
        }

结果还是不显示。

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

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

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

 注意:SQL server 2008 r2版规定主数据文件必须大于3M,微软真牛!

参考文章:

http://msdn.microsoft.com/zh-cn/magazine/cc163409.aspx

演示代码下载

 

转载于:https://www.cnblogs.com/downmoon/archive/2010/06/03/1750434.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值