知识点 词汇表 联系我们
按类别浏览
内容搜索    
当前位置:WEB开发技术知识库(www.cn-web.com) .: .Net技术 .: .Net代码库 .: asp.net中实现在线备份sqlserver数据库并实现对其管理

asp.net中实现在线备份sqlserver数据库并实现对其管理


asp.net中实现在线备份sqlserver数据库并实现对其管理
案例:
在做B/S架构的系统中,基本上都会涉及到要求在后台中实现在线实时的备份sqlserver数据库。
思想:
用存储过程来实现备份,然后用c#中的fso来实现备份数据的在线管理。
实现:
存储过程代码如下(通用):
CREATE proc p_backupdb
@dbname sysname='',   --要备份的数据库名称,不指定则备份当前数据库
@bkpath nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname nvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktype nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@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),':',''))
 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)
GO
asp.net页面中调用存储过程实现备份数据库的函数:
 /// <summary>
    /// 备份数据库
    /// </summary>
    private void backupdata()
    {
        string url = Server.MapPath(Common.ConfigHelper.GetConfigString("systemDir") + "/backdata/db/");//Common.ConfigHelper.GetConfigString("systemDir")为获取我当前系统的虚拟目录,url 的值为您要保存sqlserver备份文件的地址
        string n = "yxxmj_back" + Common.commonother.get_d() + ".bak";// Common.commonother.get_d() 为由时间来获取一字串,n为当前保存的备份名字。
        Common.commonother.backdb(url, n, "DB");//备份
        Common.commonother.messageBox(Page, "备份成功!", "bksuccess");//弹出窗口,备份成功
    }
Common为我自己用的一通用类库,实现的都是一般性操作,您可以用自己的习惯方式来替换它们,其中backdb的实现如下 :
 /// <summary>
        /// 备份数据库
        /// </summary>
        /// <param name="url">备份文件的存放目录,不指定则使用SQL默认的备份目录</param>
        /// <param name="name">份文件名</param>
        /// <param name="type">份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份</param>
        /// <returns></returns>
        public static void backdb(string url, string name, string type)
        {
            int rowsAffected;
            SqlParameter[] parameters = {
     new SqlParameter("@bkpath", SqlDbType.NVarChar,260),
     new SqlParameter("@bkfname", SqlDbType.NVarChar,260),
     new SqlParameter("@bktype", SqlDbType.NVarChar,10)};
            parameters[0].Value = url;
            parameters[1].Value = name;
            parameters[2].Value = type;
            DbHelperSQL.RunProcedure(DbHelperSQL.GetConnection("1"), "p_backupdb", parameters, out rowsAffected);
        }
实现备份后,我们需要用GridView控件来绑定备份的数据库文件的数据集,我们这里的数据集通过fso来实现的。
绑定的代码如下:

    /// <summary>
    /// 绑定备份好的文件
    /// </summary>
    private void bindD()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("fn");
        string[] FileNames = Directory.GetFiles(this.Server.MapPath(@Common.ConfigHelper.GetConfigString("systemDir") + "/backdata/db/"));//取得备份文件夹下的所有文件数据集
        DataRow dr;
        if (FileNames.Length > 0)
        {
            for (int i = 0; i < FileNames.Length; i++)
            {
                string[] files = FileNames[i].Trim().Split('\\');
                string filesname = files[files.Length - 1].Trim();
                dr = dt.NewRow();
                dr["fn"] = filesname;
                dt.Rows.Add(dr);
            }
        }
        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();
    }
注,命名空间需要引用“using System.IO;”
效果图:


对此文章打分评级

用户评论

增加评论
此文章还没有任何评论!
网站地图 - 知识词汇 - 全文检索 - 广告服务 - 帮助中心 - 联系我们
.:www.cn-web.com
网站技术开发联盟之WEB开发技术知识库
联系人:老韩(QQ:5679551)
晋ICP备07003487号