http://topic.csdn.net/t/20030526/20/1837137.html
很棘手的问题,不知道该如何实现?
其实我想直接让用户学习sql server(后台用的是sql server数据库)的备份就可以了。不过就怕他们不愿意,所以想用自己做的程序去实现。
#1楼 得分:20回复于:2003-05-26 20:45:11
sql= "BACKUP DATABASE Northwind TO DISK = 'c:\Northwind.bak ' with init "
|
#2楼 得分:50回复于:2003-05-26 20:47:45
using SQLDMO;
protected Backup2Class backup=new Backup2Class(); private void startBackup_Click(object sender, System.EventArgs e) { string servername; string login; string password; string databasename; string serverpathname; if(Session[ "personnelID "]==null) { Label1.Text= "请您重新登陆本系统! "; return; } if(checkText().Length!=0) { Label1.Text=checkText()+ " 不能为空! "; return; } servername=serverName.Text.Trim(); login=loginName.Text.Trim(); password=passWord.Text.Trim()+ " "; databasename=databaseName.Text.Trim(); serverpathname=serverpathName.Text.Trim(); sqldmoSQLServer.LoginSecure=false; try { sqldmoSQLServer.Connect(servername,login,password); databases=sqldmoSQLServer.Databases; database2=(Database2)databases.Item(databasename,null); backup.PercentCompleteNotification=1; backup.Database=database2.Name; backup.Files=@serverpathname; backup.SQLBackup(sqldmoSQLServer); Label1.Text= "完成备份! "; } catch(Exception ex) { Label1.Text=ex.Message.ToString(); } catch { Label1.Text= "备份失败! "; } finally { SqldmoClear(); } } private void SqldmoClear() { sqldmoSQLServer.DisConnect(); sqldmoSQLServer.Close(); backup=null; sqldmoSQLServer=null; } private string checkText() { string strState= " "; if(serverName.Text.Trim().Length==0) { strState= "Server Name "; return strState; } if(loginName.Text.Trim().Length==0) { strState= "Administrators "; return strState; } if(databaseName.Text.Trim().Length==0) { strState= "Database Name "; return strState; } if(serverpathName.Text.Trim().Length==0) { strState= "[Server Path] Backup To "; return strState; } return strState; } |
#8楼 得分:30回复于:2003-05-27 09:03:29
给你一个备份的存储过程你调用就可以了:
create PROCEDURE GY_DBBak @bakequip int, -- 备份设备:磁盘&磁带 @bakpath varchar(50), -- 带全路径的备份文件名 @baktype int, -- 完全备份&增量备份 @baklog int, -- ‘0’备份日志 @bakdb int, -- ‘0’备份数据库 @kind varchar(7), --备份还是恢复 @retmsg varchar(20) output --返回信息 AS DECLARE @DevName_data varchar(50) DECLARE @DevName_log varchar(50) declare @db_path varchar(100) declare @log_path varchar(100) DECLARE @RC INT SELECT @db_path = @bakpath + '.dat ' SELECT @log_path = @bakpath + 'log.dat ' SELECT @RC=0 select @DevName_data= 'dali ',@DevName_log= 'dalilog ' DBCC CHECKDB(数据库名) /*********************************************************** ** CREATE BACKUP AND RESTORE DEVICES ************************************************************/ IF @RC=0 BEGIN EXEC sp_addumpdevice 'disk ', @DevName_data,@db_path exec sp_addumpdevice 'disk ', @DevName_log,@log_path select @rc=@@error IF @RC <> 0 begin EXEC SP_DropDevice @Devname_data exec sp_dropdevice @devname_log SELECT @RC=-1000 return @rc end END IF @kind= 'backup ' BEGIN IF @bakequip=0 BEGIN IF @baktype=0 BEGIN IF @bakdb=0 BEGIN BACKUP DATABASE 数据库名 TO DISK=@Devname_data WITH INIT END IF @baklog=0 BEGIN BACKUP LOG 数据库名 WITH NO_LOG BACKUP LOG 数据库名 TO DISK=@DevName_log WITH INIT,NO_TRUNCATE END END ELSE BEGIN IF @bakdb=0 BEGIN BACKUP DATABASE 数据库名 TO DISK=@DevName_data WITH NOINIT END IF @baklog=0 BEGIN BACKUP LOG 数据库名 WITH NO_LOG BACKUP LOG 数据库名 TO DISK=@DevName_log WITH NOINIT,NO_TRUNCATE END END END SELECT @retmsg= '数据库备份成功! ' END IF @kind= 'restore ' BEGIN RESTORE DATABASE 数据库名 FROM DISK= @DevName_data WITH REPLACE SELECT @retmsg= '恢复数据库成功! ' END EXEC SP_DropDevice @Devname_data exec sp_dropdevice @devname_log RETURN 0 ---测试: declare @ varchar(100) exec gy_dbbak 0, 'aa ',0,0,0, 'backup ',@ output select @ ------------------------------------------------- 备份设备: sp_helpdevice 或 use master select * from sysdevices |