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

创新互联公司是专业的海安网站建设公司,海安接单;提供成都网站建设、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行海安网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
一个奇怪的问题,用SQL Server 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);
 - }
 - ///
 
备份数据库
- ///
 - 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 SMO备份数据库进度条不显示的介绍,望你能有所收获。
【编辑推荐】
                当前名称:SQLServerSMO备份数据库进度条不显示的原因
                
                文章路径:http://www.csdahua.cn/qtweb/news10/56210.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网