C#简单备份/还原代码

 (图1)      (图2)

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

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

图1代码
1 #region 点击备份按钮
2 private void 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 private void 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 private void btnClose_Click( object sender, EventArgs e)
40 {
41 this .Close();
42 }
43 #endregion

图2代码:

图2
1 #region 点击还原路径按钮
2 private void 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 private void 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 子句来只覆盖该日志的内容。

解决如下:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值