SQL Server使用C#执行备份#
问题描述:
我调查了通过使用C#的SMO创建数据库备份的可能性。 这个任务非常简单,代码简单明了。我只有一个问题:如何检查备份是否真的创建?SQL Server使用C#执行备份#
SqlBackup.SqlBackup方法返回没有参数,我甚至不知道它是否抛出任何异常。 (我知道的唯一的事情是它阻塞,因为还有SqlBackupAsync方法)
我将不胜感激任何帮助。
答
你可以和它很可能给你问什么,
但做备份它自身使用SMO它不是很辛苦,但最困难的部分是管理备份和恢复。
这将很难把所有的代码放在这里,但它不适合。所以我会尽我所能把你需要的线条。
SqlBackup.SqlBackup不返回任何值,它是一个void函数。 但它需要一个参数,它是“服务器”,请尝试以下代码:
Server srvSql;
//Connect to Server using your authentication method and load the databases in srvSql
// THEN
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Incremental = true; // will take an incemental backup
bkpDatabase.Incremental = false; // will take a Full backup
bkpDatabase.Database = "your DB name";
BackupDeviceItem bDevice = new BackupDeviceItem("Backup.bak", DeviceType.File);
bkpDatabase.Devices.Add(bDevice);
bkpDatabase.PercentCompleteNotification = 1;// this for progress
bkpDatabase.SqlBackup(srvSql);
bkpDatabase.Devices.Clear();
答
我已经调查使用Reflector.NET问题(我想这是合法的,因为展鹏是女士金牌认证合作伙伴和反思.NET开箱即用的.NET库)。当我发现了方法抛出两种类型的异常:
FailedOperationException - 在大多数情况下,其他的异常“翻译”(我想转换装置创造新的FailedOperationException和设置的InnerException什么实际抛出)
UnsupportedVersionException - (?这是SQL Server 2008中)在一种情况下,当日志截断设置为TRUNCATEONLY和服务器主要版本更或等于10
这部分解决了我的问题,因为我不是100%肯定的是,如果出现问题那些电子xceptions将被抛出。
我从来没有使用它自己,但最好从略读文档你可以附加一个事件处理程序[完整](http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management .smo.backuprestorebase.complete.aspx)来查看它是否返回错误代码。但我不能100%确定会在非异步情况下调用,并且必须有更好的方法! – Rup 2011-05-03 15:13:54