MS SQL Server还原备份

来源:互联网 发布:大连理工软件学院好吗 编辑:程序博客网 时间:2024/06/05 04:40
一个还原备份MS SQL Server数据库的页面.原理很清晰:备份很简单,不用多说;还原时可能有用户正在使用,这时要强制断开所有连接,然后再还原数据库.具体代码如下:
    备份代码:
    /// <summary>
    /// 将数据库NorthWind备份到backup目录下的DB_年_月_日_时_分_秒.back
    /// </summary>
    protected void BackUp()
    {
        string fileName = Server.MapPath("backup/DB_"
            + DateTime.Now.ToString().Replace('-', '_').Replace(':', '_').Replace(' ', '_').Replace('/', '_') + ".bak");
        try
        {
            DbHelperSQL.ExecuteSql("backup database NorthWind to disk='" + fileName + "'");
            System.IO.FileInfo file = new System.IO.FileInfo(fileName);
            Response.Clear();
            Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/ms-excel";
            Response.WriteFile(file.FullName);
            ApplicationInstance.CompleteRequest();
            Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('备份成功!')</script>");
        }
        catch (Exception ee)
        {
            Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('备份失败!/r/n原因:"
                + ee.Message.Replace("'", "").Replace("/"", "").Replace("/r", "").Replace("/n", "") + "')</script>");
        }
    }
    还原代码:
    /// <summary>
    /// 用备份文件fileName还原数据库NorthWind
    /// </summary>
    /// <param name="fileName"></param>
    protected void Restore(string fileName)
    {
        try
        {
            string sql = null;
            sql += "use master /r/n";
            sql += "declare cssp cursor for select spid from sysprocesses where dbid=db_id('NorthWind') /r/n";
            sql += "declare @sdid int /r/n";
            sql += "open cssp /r/n";
            sql += "    fetch next from cssp into @sdid /r/n";
            sql += "    while @@fetch_status = 0 /r/n";
            sql += "    begin /r/n";
            sql += "        exec('kill [email='+@sdid]'+@sdid[/email]) /r/n";
            sql += "        fetch next from cssp into @sdid /r/n";
            sql += "    end /r/n";
            sql += "close cssp /r/n";
            sql += "deallocate cssp /r/n";
            sql += "restore database NorthWind from disk='" + fileName + "'";
            DbHelperSQL.ExecuteSql(sql);
            Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('还原成功!')</script>");
        }
        catch (Exception ee)
        {
            Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('还原失败!原因:"
                + ee.Message.Replace("'", "").Replace("/"", "").Replace("/r", "").Replace("/n", "") + "')</script>");
        }
    }
原创粉丝点击