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;”
效果图: