• C#简单备份/还原代码


     (图1)      (图2)

    界面如上,记得加上一个OpenFileDialog控件(ofd)和SaveFileDialog控件(sd)

    代码如下:(图1的代码)

    图1代码
    1 #region 点击备份按钮
    2 privatevoid btnBackup_Click(object sender, EventArgs e)
    3 {
    4 string Str_dar ="";
    5 Str_dar = txtDefaultWay.Text.Trim().ToString();//备份路径
    6  if (txtDefaultWay.Text =="")
    7 {
    8 MessageBox.Show("请选择备份数据库文件的路径。");
    9 return;
    10 }
    11 try
    12 {
    13 Str_dar ="backup database DB_MovieFilm to disk='"+ Str_dar +"'";
    14 sqlhelper.getcomnum(Str_dar);//执行SQL语句
    15   MessageBox.Show("数据备份成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    16 }
    17 catch (Exception ex)
    18 {
    19 MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    20 }
    21 }
    22 #endregion
    23
    24 #region 点击备份路径按钮
    25 privatevoid btnWay_Click(object sender, EventArgs e)
    26 {
    27 sd.InitialDirectory = Application.StartupPath +"\\";//默认路径为D://
    28 sd.Filter ="备份文件 (*.bak)|*.bak|所有文件 (*.*)|*.*";//筛选器,定义文件类型
    29 sd.FilterIndex =1; //默认值为第一个
    30 sd.RestoreDirectory =true; //重新定位保存路径
    31 if (sd.ShowDialog() == DialogResult.OK)
    32 {
    33 txtDefaultWay.Text = sd.FileName.ToString();//文本框的内容=路径
    34 }
    35 }
    36 #endregion
    37
    38 #region 点击备份数据库的取消按钮
    39 privatevoid btnClose_Click(object sender, EventArgs e)
    40 {
    41 this.Close();
    42 }
    43 #endregion

    图2代码:

    图2
    1 #region 点击还原路径按钮
    2 privatevoid btnRestoreWay_Click(object sender, EventArgs e)
    3 {
    4 ofd.InitialDirectory = Application.StartupPath +"\\";
    5 ofd.Filter ="(*.bak)|*.bak|(所有文件)|*.*";
    6 ofd.FilterIndex =1;
    7 ofd.RestoreDirectory =true;
    8 if (ofd.ShowDialog() == DialogResult.OK)
    9 {
    10 txtWay.Text = ofd.FileName.ToString();//文本框的内容=路径
    11 }
    12 }
    13 #endregion
    14
    15 #region 点击还原按钮
    16 privatevoid btnRestore_Click(object sender, EventArgs e)
    17 {
    18 if (txtWay.Text =="")
    19 {
    20 MessageBox.Show("请选择备份数据库文件的路径。");
    21 return;
    22 }
    23 try
    24 {
    25 string P_Str_cmdtxt ="USE master DECLARE tb CURSOR LOCAL FOR SELECT 'Kill '+ CAST(Spid AS VARCHAR) FROM master.dbo.sysprocesses";
    26 P_Str_cmdtxt +=" WHERE dbid=DB_ID('DB_MovieFilm') DECLARE @s nvarchar(1000) OPEN tb FETCH tb INTO @s";
    27 P_Str_cmdtxt +=" WHILE @@FETCH_STATUS = 0 BEGIN EXEC (@s) FETCH tb INTO @s END CLOSE tb DEALLOCATE tb";
    28 P_Str_cmdtxt +=" RESTORE DATABASE DB_MovieFilm FROM disk='"+ txtWay.Text +"'";
    29 SqlConnection sqlcon = sqlhelper.getcon();//数据库连接
    30 sqlcon.Close();//关闭数据库
    31 sqlcon.Open();//重新打开数据库
    32 SqlCommand sqlcom =new SqlCommand(P_Str_cmdtxt, sqlcon);
    33 sqlcom.ExecuteNonQuery();
    34 MessageBox.Show("数据还原成功!", "提示框", MessageBoxButtons.OK, MessageBoxIcon.Information);
    35 if (sqlcon.State == ConnectionState.Closed)
    36 {
    37 sqlcon.Open();
    38 }
    39
    40 MessageBox.Show("为了避免数据丢失,在数据库原还后将关闭整个系统。");
    41 Application.Exit();
    42
    43 }
    44 catch (Exception ex)
    45 {
    46 MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    47 }
    48 }
    49 #endregion

    运行还原的时候,还是会出错,错误如下:

    尚未备份数据库 "DB_MovieFilm" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来只覆盖该日志的内容。

    解决如下:

    将恢复模式的完整改为简单即可

    附:恢复模式                说明
       简单           不用备份的事务日志,即可还原
                      用于小型数据库和不经常更改的数据库
       完整           所有事务都被记录到日志中
                      保留所有日志,直到事务日志备份
                      用于生产数据库
     大容量日志       完整恢复模式的补充
                      不将大容量日志操作写入日志

  • 相关阅读:
    neo4j 运行报错解决方法
    vmstat 指令简介
    yarn的安装和使用
    easyconnect的下载地址
    2021.07.08 泗水
    2021.04.10 春游
    “两”个证明
    2021.04.01
    Swoft调用阿里云OSS报错:RequestId
    mysql临时表代替in的写法
  • 原文地址:https://www.cnblogs.com/jys509/p/2046802.html
Copyright © 2020-2023  润新知