SQLDMO备份数据库的代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 CMS.Model;
using CMS.BLL;
using SQLDMO;
using System.IO;
public partial class Admin_Users_DataBack : System.Web.UI.Page
{
/// <summary>
/// sql服务器名称或者IP地址
/// </summary>
private string server;
/// <summary>
///用户名称
/// </summary>
private string uid;
/// <summary>
/// 用户密码
/// </summary>
private string pwd;
/// <summary>
/// 数据库名称
/// </summary>
private string database;
/// <summary>
/// Web.Config连接字符串
/// </summary>
private string conn;
/// <summary>
/// 备份
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
if (Session["UID"] == null)
{
Response.Redirect("~/Admin/Users/logfalse.aspx");
}
else
{
BindData();
}
}
}
/// <summary>
/// 绑定备份信息列表,
/// </summary>
private void BindData()
{
CMS.BLL.T_DataBack bll = new CMS.BLL.T_DataBack();
DataSet ds = new DataSet();
ds = bll.GetAllList();
GridView1.DataSource = ds;
GridView1.DataBind();
}
/// <summary>
/// SqlDbBackUp类得到数据库IP,名称和用户名密码
/// </summary>
public void SqlDbBackUp()
{
conn = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
server = cut(conn, "server=", ";");
uid = cut(conn, "uid=", ";");
pwd = cut(conn, "pwd=", ";");
database = cut(conn, "database=", ";");
}
/// <summary>
/// 截连接字符串用
/// </summary>
/// <param name="str"></param>
/// <param name="bg"></param>
/// <param name="ed"></param>
/// <returns></returns>
public string cut(string str, string bg, string ed)
{
string sub;
sub = str.Substring(str.IndexOf(bg) + bg.Length);
sub = sub.Substring(0, sub.IndexOf(";"));
return sub;
}
/// <summary>
/// 数据库database备份
/// </summary>
public bool DbBackup(string url)
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(server, uid, pwd);
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = database;
oBackup.Files = url;
oBackup.BackupSetName = database;
oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
return true;
}
catch(Exception ex)
{
// return false;
throw ex;
}
finally
{
oSQLServer.DisConnect();
}
}
/// <summary>
/// 数据库database恢复
/// </summary>
public string DbRestore(string url)
{
if (KillProcesses() != true)//先杀死进程
{
return "操作失败";
}
else
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(server, uid, pwd);
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = database;
oRestore.Files = url;//@"d:\\Northwind.bak"; 读取文件的路径和名称
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
return "恢复数据库成功";
}
catch (Exception e)
{
return "恢复数据库失败";
throw e;
}
finally
{
oSQLServer.DisConnect();
}
}
} /// <summary>
/// 杀死Sql database 连接进程
/// </summary>
/// <returns></returns>
private bool KillProcesses()
{
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(server, uid, pwd);
SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
int iColPIDNum = -1;
int iColDbName = -1;
for (int i = 1; i <= qr.Columns; i++)
{
string strName = qr.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != -1 && iColDbName != -1)
break;
}
for (int i = 1; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == database.ToUpper())
{
svr.KillProcess(lPID);
}
}
return true;
}
catch
{
//失败
return false;
}
finally
{
svr.DisConnect();
}
}
/// <summary>
/// 备份
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
try
{
SqlDbBackUp();
string fileName = DateTime.Now.ToString("yyyyMMddhhmmssffff") + ".bak";
string url ="["+Server.MapPath("~/") + "databack\\" + fileName.ToString()+"]";
if (DbBackup(url) == true)
{
CMS.BLL.T_DataBack bll = new CMS.BLL.T_DataBack();
CMS.Model.T_DataBack model = new CMS.Model.T_DataBack();
model.BackUrl ="databack\\" + fileName;
model.BackPeople = Session["UID"].ToString();
model.BackTime = DateTime.Now;
bll.Add(model);
Page.ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('备份成功!');</script>");
BindData();
}
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}
//else
//{
// Page.ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('备份失败!');</script>");
//}
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string ID = GridView1.DataKeys[e.RowIndex].Value.ToString();
CMS.Model.T_DataBack model = new CMS.Model.T_DataBack();
CMS.BLL.T_DataBack bll = new CMS.BLL.T_DataBack();
model = bll.GetModel(int.Parse(ID));
string url = model.BackUrl.ToString();
if (url != "")
{
//string tmpStr = string.Format(@"..\..\{0}", url.ToString().Replace("/", "\\"));
string tmpStr = string.Format(@"..\..\{0}", url.ToString());
FileInfo file = new FileInfo(Server.MapPath(tmpStr));
file.Delete();
}
bll.Delete(int.Parse(ID));
BindData();
}
protected void Button1_Command(object sender, CommandEventArgs e)
{
string ID = ((Button)sender).CommandArgument.ToString();
//Response.Write("<script>alert('"+Tempstr+"');</script>");
CMS.Model.T_DataBack model = new CMS.Model.T_DataBack();
CMS.BLL.T_DataBack bll = new CMS.BLL.T_DataBack();
model = bll.GetModel(int.Parse(ID));
string url = model.BackUrl.ToString();
if (url != "")
{
SqlDbBackUp();
string tmpStr ="["+ Server.MapPath("~/") + url.ToString()+"]";
string i = DbRestore(tmpStr);
Page.ClientScript.RegisterClientScriptBlock(GetType(), "", "<script>alert('" + i + "');</script>");
}
}
protected void Turn_Click(object sender, EventArgs e)
{
GridView1.PageIndex = int.Parse(((TextBox)GridView1.BottomPagerRow.FindControl("txtGoPage")).Text) - 1;
BindData();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindData();
}
}
浙公网安备 33010602011771号