.NET实现SQL08数据库备份和还原!

Orders 2010-03-16 12:41:58


using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using SQLDMO;

public partial class Default2 : System.Web.UI.Page
{
string ServerName = string.Empty;
string UserName = string.Empty;
string Password = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
ArrayList list = GetServerList();
//for (int i = 0; i < list.Count;i++ )
//{
// Response.Write(list[i].ToString()+"n/");
//}
ArrayList list2 = GetDbList(".", "sa", "sa");
//for (int i = 0; i < list.Count; i++)
//{
// Response.Write(list2[i].ToString() + "n/");
//}
Response.Write(BackUPDB("aasheaa", "aasheaan.bak"));

}
public ArrayList GetServerList()
{
ArrayList alServers = new ArrayList();
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
try
{
SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers();
for (int i = 1; i <= serverList.Count; i++)
{
alServers.Add(serverList.Item(i));
}
}
catch (Exception e)
{
throw (new Exception("取数据库服务器列表出错:" + e.Message));
}
finally
{
sqlApp.Quit();
}
return alServers;
}
//取得指定数据库服务器的数据库列表
public ArrayList GetDbList(string strServerName, string strUserName, string strPwd)
{
ServerName = strServerName;
UserName = strUserName;
Password = strPwd;

ArrayList alDbs = new ArrayList();
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName, UserName, Password);
foreach (SQLDMO.Database db in svr.Databases)
{
if (db.Name != null)
alDbs.Add(db.Name);
}
}
catch (Exception e)
{
throw (new Exception("连接数据库出错:" + e.Message));
}
finally
{
svr.DisConnect();
sqlApp.Quit();
}
return alDbs;
}
public bool BackUPDB(string strDbName, string strFileName, ProgressBar pgbMain)
{
PBar = pgbMain ;
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
try
{
svr.Connect(ServerName,UserName,Password) ;
SQLDMO.Backup bak = new SQLDMO.BackupClass();
bak.Action = 0 ;
bak.Initialize = true ;
SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete += pceh;

bak.Files = strFileName;
bak.Database = strDbName;
bak.SQLBackup(svr);
return true ;
}
catch(Exception err)
{
throw(new Exception("备份数据库失败"+err.Message)) ;
}
finally
{
svr.DisConnect() ;
}
}

private void Step(string message,int percent)
{
PBar.Value = percent ;
}
//其中,这两个语句实现了进度的实时显示:
//SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
//bak.PercentComplete += pceh;
//Step就是上面private void Step(string message,int percent) 的方法名称,它用来显示进度条的当前进度。


}
...全文
389 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-03-16
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090120/18/395f5729-b352-42ca-914e-5a63102516b5.html
或使用存储过程
CREATE proc dbo.Data_Backup @dbname sysname='',@bkpath nvarchar(260)='',@bkfname nvarchar(260)='',@bktype nvarchar(10)='DB',@appendfile bit=1
as declare @sql varchar(8000) if isnull(@dbname,'')='' set @dbname=db_name() if isnull(@bkfname,'')=''
set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK' set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname),'\DATE\',convert(varchar,getdate(),112)),'\TIME\',replace(convert(varchar,getdate(),108),':',''))
update XTSZ set FNAME=@bkfname
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname +' to disk='''+@bkpath+@bkfname +''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end+case @appendfile when 1 then 'NOINIT' else 'INIT' end
exec(@sql)

Orders 2010-03-16
  • 打赏
  • 举报
回复
感觉好像是 SQLDMO 不支持08
Orders 2010-03-16
  • 打赏
  • 举报
回复
T-SQL 当然可以! 但是不能用T-SQL
Orders 2010-03-16
  • 打赏
  • 举报
回复
测试了下,05 的没问题 备份08的时候出错! SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();执行他的时候报错
inmyownsky1 2010-03-16
  • 打赏
  • 举报
回复
帮顶。。。。。。。。。。。。
minhua1983 2010-03-16
  • 打赏
  • 举报
回复
一句sql就可以解决了啊

62,052

社区成员

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

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

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

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