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

dong_horse 2003-05-26 08:39:35
很棘手的问题,不知道该如何实现?

其实我想直接让用户学习sql server(后台用的是sql server数据库)的备份就可以了。不过就怕他们不愿意,所以想用自己做的程序去实现。
...全文
95 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyb_8022 2003-05-28
  • 打赏
  • 举报
回复
xuexi
dong_horse 2003-05-28
  • 打赏
  • 举报
回复
to iceflylee(冠甄.net):
谢谢,没有问题。
但是如何恢复呢?
pcuser 2003-05-28
  • 打赏
  • 举报
回复
关注
dong_horse 2003-05-28
  • 打赏
  • 举报
回复
还有其它的方法吗?
请大家各抒己见,下午5点前结贴。
114 2003-05-27
  • 打赏
  • 举报
回复
给你一个备份的存储过程你调用就可以了:
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
coo_key 2003-05-27
  • 打赏
  • 举报
回复
up
iceflylee 2003-05-27
  • 打赏
  • 举报
回复
up
系统里有dll
mmkk 2003-05-26
  • 打赏
  • 举报
回复
SQLDMO的确强大,你需要在VS.NET中添加COM引用.
dong_horse 2003-05-26
  • 打赏
  • 举报
回复
up
dong_horse 2003-05-26
  • 打赏
  • 举报
回复
to iceflylee(冠甄.net):
为什么我的vs.net找不到SQLDMO的名字空间?
iceflylee 2003-05-26
  • 打赏
  • 举报
回复
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;
}
孟子E章 2003-05-26
  • 打赏
  • 举报
回复
sql="BACKUP DATABASE Northwind TO DISK = 'c:\Northwind.bak' with init"

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧