欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

在asp.net中备份与还原sqlserver数据库

创建时间:2011年12月05日 22:34  阅读次数:(6949)
分享到:
该功能主要还是调用sqlserver中的backup与restore来完成sqlserver数据库的还原与备份,小编将两个功能分别写成两个方法,各位在程序中直接调用即可。

一,备份数据库
/// <summary >
/// 备份数据库
/// </summary >
/// <param name="databasename" >数据库名称</param >
/// <param name="filepath" >备份地址</param >
/// <param name="istype" >1 完整数据库 2仅备份日志</param >
public static void BackUp(string databasename, string filepath, string backupname, byte istype, bool isFormat)
{
    StringBuilder sql = new StringBuilder();
    switch (istype)
    {
        case 1:
            sql.Append("backup database " + databasename + " to disk=N'" + filepath + "' with STATS = 10");
            break;
        case 2:
            sql.Append("backup log " + databasename + " to disk=N'" + filepath + "' with STATS = 10");
            break;
        case 3:
            sql.Append("backup database " + databasename + " to disk=N'" + filepath + "' with differential, STATS = 10");
            break;
        default: break;
    }

    sql.Append(", name=N'" + backupname + "'");
    if (isFormat)
        sql.Append(",format");

    using (SqlConnection conn = SqlConn())
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = conn;
            cmd.CommandText = sql.ToString();
            cmd.CommandType = CommandType.Text;

            cmd.ExecuteNonQuery();
        }
    }
}


上面代码中的C#代码就不用解释了,都是一些对sql server最基础的操作,解释一下sql:
backup database '要备份的数据库名称'--备份指定的数据库
to disk--备份文件存放的位置
stats--备份完成指定的百分比后就返回一条消息,比如这里stats=10就是当备份完成10%就返回一条消息,这个也是默认值,如果我们不设置stats,默认就是10.
differential--仅备份与上次完整备份有差异的部分,也就是备份差异数据库,默认情况下是备份完整数据库
format--是否格式化备份介质,如果设置该项,则备份文件会格式化选中的备份文件,否则会在选中的备份文件上累加。
backup log '要备份的数据库名称'--备份指定数据库日志文件

二、还原数据库
/// <summary >
/// 还原数据库
/// </summary >
/// <param name="databasename" >数据库名称</param >
/// <param name="filepath" ></param >
public static void ReStore(string databasename, string filepath)
{
    try
    {
        string sql = @"use master
            declare @dbname varchar(50)
            set @dbname='" + databasename + "'";

        sql = string.Concat(sql, @"declare @sql varchar(50)
            declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses 
                where db_name(dbid)=@dbname 

            open cs_result
            fetch next from cs_result into @sql
            while @@fetch_status=0
            begin
                execute(@sql)
                fetch next from cs_result into @sql
            end
            close cs_result
            deallocate cs_result
            ");
        sql = string.Concat(sql, @" restore database " + databasename + " from disk='" + filepath + "' with replace");

        using (SqlConnection conn = SqlConn())
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;

                cmd.ExecuteNonQuery();
            }
        }
    }
    catch (SqlException ex)
    {
        throw ex;
    }
}


解释一下上面的sql:
declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses  where db_name(dbid)=@dbname 

open cs_result
fetch next from cs_result into @sql
while @@fetch_status=0
begin
      execute(@sql)
      fetch next from cs_result into @sql
end
close cs_result
deallocate cs_result
该段sql是中止所有正在使用要还原数据库的进程,因为还原数据库要求对该数据库拥有独占权限。

restore database '要还原的数据库名称'--还原数据库
from disk--备份文件的地址
replace--是否覆盖原有数据库,这个选项与我们在SQL Server Management Studio中还原数据的"覆盖现有数据库"选项功能一样。

注意:由 SQL Server 的较新版本创建的备份将无法在 SQL Server 的早期版本中还原

两个方法就写完了,怎么样,备份与还原数据库还是挺简单的吧。&
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 30+54=? 的结果(结果是:84)
结  果: