SQL数据库备份的VC实现.docx
文本预览下载声明
SQL数据库的VC实现
Author:lfl
Created on: 2010-6-3
完整备份
1. 完整备份数据库的脚本
USE master;
GO
BACKUP DATABASE [$(dbname)] TO DISK = N$(driver):$(location)$(dbname).bak WITH NOFORMAT, NOINIT, NAME = N$(dbname)-完整数据库备份, SKIP, NOREWIND, NOUNLOAD, STATS = 10 ;
BACKUP LOG [$(dbname)] TO DISK = N$(driver):$(location)$(dbname).bak WITH NO_LOG;
GO
USE [$(dbname)];
GO
DBCC SHRINKDATABASE(N$(dbname));
我将它存为Backupdatabasewithlocation.sql。
2. sqlcmd的批处理脚本
sqlcmd -U %1 -P %2 -v dbname=%3 driver=%4 location=%5 -i %6
我将它存为BackupdatabasewithLocation.bat。
3. 在VC中设定路径
CString app= C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Backup\\;
m_strBackupLocation = app; //m_strBackupLocation是一个Edit Box所绑定的CString变量。
记住,一定要在路径中添加连续的两个\符号,否则,VC会将单独的\符号视为在VC中连接下一行字符作为整个字符串的操作符。而且,记住,一定要在最后一个目录的后面再添加上\\,否则,在接下来的_splitpath处理过程中,会把最后一层目录给忽略掉。
4. 处理VC中的路径
char _buffer[255];
GetShortPathName(m_strBackupLocation, _buffer, 256);//转换成短路径(无空格短路径)
char drive[500],dir[500];
CString test = _buffer;
_splitpath(test, drive, dir,NULL,NULL); //用_splitpath可解析出路径、文件名、扩展名
CString d = drive;
d.Replace(:,);
CString c = dir;
举例:
4.1 路径中无空格
CString app = C:\\backup\\;
4.2 路径中有空格
CString app= C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Backup\\;
设置断点后,得到以上的变量的值。
4.3 假若在最后一层路径后没有加\
CString app= C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Backup;
5. 在VC中执行sqlcmd脚本
para=sa genius +instanceName+ +d+ +c+ sql/Backupdatabasewithlocation.sql;
ShellExecute(NULL,open,bat/BackupdatabasewithLocation.bat,para,NULL,SW_SHOW);
差异备份
1. 差异备份数据库的脚本(由于事务日志备份时出错,故已将NO_LOG修改为NO_TRUNCATE)
USE master;
GO
BACKUP DATABASE [$(dbname)] TO DISK = N$(driver):$(location)$(dbname).bak WITH DIFFERENTIAL, NOINIT, NAME = N$(dbname)-差异数据库备份, SKIP, NOREWIND, NOUNLOAD, STATS = 10 ;
BACKUP LOG [$(dbname)] TO DISK = N$(driver):$(location)$(dbname).bak WITH NO_TRUNCATE;
GO
2. 差异备份的批处理脚本
sqlcmd -U %1 -P %2 -v dbname=%3 driver=%4 location=%5 -i %6
3. 差异备份在VC中的语句
//差异备份
if(time.GetDayOfWeek()!=1time.GetHour()==23time.GetMinute
显示全部