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();
    }
}

posted @ 2011-08-12 09:50  agen  阅读(316)  评论(0)    收藏  举报