日期:2014-05-17  浏览次数:20967 次

用SQLDMO备份SQL2005数据库碰到的几个问题
用SQLDMO做SQL2005数据库备份程序,主要代码如下:
SQLDMO.Backup sqldmo_backup = new SQLDMO.BackupClass();
SQLDMO.SQLServer sqldmo_sqlserver = new SQLDMO.SQLServerClass();
sqldmo_backup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
//下面两句是显示进度条的状态
SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
sqldmo_backup.PercentComplete += pceh;
//数据库名称:
sqldmo_backup.Database = "Jiamei_CS";
//备份的路径
sqldmo_backup.Files = @p_str_backuppath+@"\jiamei_cs.bak";
//备份的文件名
sqldmo_backup.BackupSetName = "Jiamei_CS";
sqldmo_backup.BackupSetDescription = "数据库备份";
sqldmo_backup.Initialize = true;


private void Step(string message, int percent)
{
  progressBar1.Value = percent;
}

运行后成功了,由于这段资料是从网上找的,有几个问题想请教:
1、sqldmo_backup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database是什么意思,是开始备份吗,写成sqldmo_backup.Action = 0也能运行,怎么回事?
2、sqldmo_backup.BackupSetName = "Jiamei_CS"是什么意思?备份里没作用吧?
3、sqldmo_backup.BackupSetDescription = "数据库备份"是什么,备份好后我也没找到"数据库备份"这个目录或文件,这句可以不写吧?
4、sqldmo_backup.Initialize = true有什么作用?
5、按照文章说的SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step)和qldmo_backup.PercentComplete += pceh这2句加上Step函数可以显示进度条,但是我运行时进度条怎么不显示进度?
6、sqldmo_backup.Files = @p_str_backuppath+@"\jiamei_cs.bak"这句指备份的目标路径及目标文件名,现在问题是如果p_str_backuppath所代表的目标路径是长文件名,如“D:\Program Files”超过8个字符了,运行时提示无法找到这个目标,是要转成短文件名吧?

------解决方案--------------------
1、sqldmo_backup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database是什么意思,是开始备份吗,写成sqldmo_backup.Action = 0也能运行,怎么回事? 

声明备份整个数据库

2、sqldmo_backup.BackupSetName = "Jiamei_CS"是什么意思?备份里没作用吧? 

要备份的数据库

3、sqldmo_backup.BackupSetDescription = "数据库备份"是什么,备份好后我也没找到"数据库备份"这个目录或文件,这句可以不写吧? 

描述说明,可以不写

4、sqldmo_backup.Initialize = true有什么作用? 

忘了

5、按照文章说的SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step)和qldmo_backup.PercentComplete += pceh这2句加上Step函数可以显示进度条,但是我运行时进度条怎么不显示进度? 

Step 带个 Percent 百分比参数,把它返回的值付给进度条控件的value就可以了,用SQLDMO备份我用过,很好用,没什么问题


6、sqldmo_backup.Files = @p_str_backuppath+@"\jiamei_cs.bak"这句指备份的目标路径及目标文件名,现在问题是如果p_str_backuppath所代表的目标路径是长文件名,如“D:\Program Files”超过8个字符了,运行时提示无法找到这个目标,是要转成短文件名吧?

忘了以前写的时候有没有必须转换过,如果转换用GetShortPathName API 转换
------解决方案--------------------
1.备份的类型,包括什么数据库备份,文件备份,日志备份等等,前一种写法是用了备份类型枚举,后面是备份类型相对应的数值
2.备份的文件的名(我是这么理解的)
3.这是对你备份的数据库的文件的描述,相当于注释,可以不写
4.表示是追加备份还是重新备份,原来如果有同名的备份是否覆盖它
5.这个我试过多次也是不行,好像还是我对委托不够理解
6.不是那个问题,如果是远程备份,路径必须符合UNC规范
具体的你可以看看MSDN中的说明,还是挺详细的