VC中 通过调用脚本进行SQL数据库的备份

完整备份

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);

 

 

 

你可能感兴趣的:(sql,数据库,脚本,null,database,buffer)