您的位置:首页 > 编程语言 > ASP

用asp.net开发的一个系统,如何给用户提供数据库备份和恢复的功能?

2012-02-09 14:09 926 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: