ASP.NET数据库备份和还原
先导入Interop.SQLDMO.dll (com组件)
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// DBOperater 的摘要说明
/// </summary>
public class DBOperater
{
public DBOperater() {
// // TODO: 在此处添加构造函数逻辑 //
}
//数据库备份
public static string DbBackup(string dbName,string backupDBName)
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try {
Object aip = ip;
oSQLServer.LoginSecure = false;
oSQLServer.Connect("127.0.0.1","sa","sa");
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = dbName;
oBackup.Files = @"d:\\aaa\\"+backupDBName+".bak";
oBackup.BackupSetName = backupDBName; oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
return "数据库已成功经备份到["+oBackup.Files+"]";
}
catch(Exception ex)
{
throw new Exception("数据库备份失败: "+ex.Message);
}
finally
{
oSQLServer.DisConnect();
}
}
/// /// 数据库恢复 ///
public static string DbRestore(string dbName,string backupFile)
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect("192.168.1.110", "new", "");
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database; oRestore.Database = dbName;
oRestore.Files = @"d:\\aaa\\"+backupFile;
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
return "数据库"+dbName+"已经成功恢复!";
}
catch(Exception ex)
{
throw new Exception("数据库恢复失败: "+ex.Message );
}
finally
{
oSQLServer.DisConnect();
}
}
}
存储过程 @dbname varchar(20) as begin declare @sql nvarchar(500),@temp varchar(1000) declare @spid int set @sql='declare getspid cursor for select spid from master..sysprocesses where dbid=db_id('''+@dbname+''')' exec (@sql) open getspid |
页面
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//备份 protected void Button1_Click(object sender, EventArgs e)
{
try
{
//string path = this.File1.Value;//备份到...
string ret = DBOperater.DbBackup(t_db.Text, t_fileName.Text); this.Label1.Text = ret;
}
catch (Exception ex)
{
this.Label1.Text = ex.Message;
}
}
//恢复
protected void Button2_Click(object sender, EventArgs e)
{
string path = "d:\\aaa\\";//this.File1.Value;//恢复文件路径
//杀死所有访问该数据库的进程
string conStr = "data source=localhost;database=master;user id=sa;password=password";
SqlConnection con = new SqlConnection(conStr);
string cmdText = String.Format("EXEC sp_KillThread @dbname='{0}'", t_db.Text); SqlCommand com = new SqlCommand(cmdText, con);
try
{
con.Open();
com.ExecuteNonQuery();
con.Close();
//恢复数据库
string ret = DBOperater.DbRestore(t_db.Text, path);
this.Label1.Text = ret;
}
catch (Exception ex)
{
con.Close();
this.Label1.Text = ex.Message;
}
}