设为首页 收藏本站
查看: 924|回复: 0

[经验分享] SQL Server中SMO备份数据库进度条不显示?

[复制链接]

尚未签到

发表于 2016-11-7 07:06:49 | 显示全部楼层 |阅读模式
  有朋友提到一个奇怪的问题,用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的数据文件,果然成功显示:

DSC0000.png
  后来经反复实验,发现SQL server 2000约在数据文件加日志文件大于6M左右时显示进度条。
  而Sqlserver 2008 r2大约在3M时显示进度条。可能跟机器也有关系。
  注意:SQL server 2008 r2版规定主数据文件必须大于3M,微软真牛!

  参考文章:
  http://msdn.microsoft.com/zh-cn/magazine/cc163409.aspx


邀月注:本文版权由邀月和CSDN共同所有,转载请注明出处。
助人等于自助! 3w@live.cn


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296703-1-1.html 上篇帖子: 如何将数据导入到 SQL Server Compact Edition 数据库中 下篇帖子: 通过SQL的select语句自动得到count语句和得到sql server 2005 的分页查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表