C#实现SQL数据库备份与还原

本文介绍如何使用SQL语句进行数据库的备份与还原操作,并提供了一种解决方案来避免因数据库正在使用而导致无法获得独占访问权的问题。通过设置数据库为脱机状态并在还原后将其设回联机状态,可以有效解决这一难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  用Sql语句实现备份与还原操作时,最好不要使用需要备份或还原的数据库连接,而使用master,否则可能会出现如下三个问题:(1)超时时间已到。在操作完成之前超时时间已过或服务器未响应。(2)  在向服务器发送请求时发生传输级错误。(provider:共享内存提供程序,error:0-系统无法打开文件。)  (3)从服务器接收结果时发生传输级错误。(provider:共享内存提供程序,error:0   -   系统无法打开文件。) 

  还原或删除sql server数据库时,经常会出现:“因为数据库正在使用,所以无法获得对数据库的独占访问权”,解决方法是在还原语句前执行"Alter database BookShop Set Offline With rollback immediate”,还原语句后执行“Alter database BookShop Set Online With Rollback immediate”。

 1 using System;
 2 using System.Data;
 3 using System.Data.SqlClient;
 4 
 5 namespace Util
 6 {
 7     class DbHelper
 8     {
 9         public static string DbName { get; set; }
10 
11         private static SqlConnection SqlConnection = new SqlConnection("data source=.;Initial Catalog=master;integrated security=SSPI;");
12         private static string SqlBackup = "BACKUP DATABASE BookShop TO DISK = 'F:\\ms\\src\\InternetBookstore\\DB\\" + DbName + ".bak'";
13         private static string SqlRestore = "Alter database BookShop Set Offline With rollback immediate RESTORE DATABASE BookShop FROM DISK = 'F:\\ms\\src\\InternetBookstore\\DB\\" + DbName + ".bak' Alter database BookShop Set Online With Rollback immediate";
14         private SqlCommand SqlCommandBackup     = new SqlCommand() { Connection = SqlConnection, CommandType = CommandType.Text, CommandText = SqlBackup };
15         private SqlCommand SqlCommandRestore    = new SqlCommand() { Connection = SqlConnection, CommandType = CommandType.Text, CommandText = SqlRestore };
16 
17         public void DbBackup()
18         {
19             SqlConnection.Open();
20             try
21             {
22                 SqlCommandBackup.ExecuteNonQuery();
23             }
24             catch (Exception e)
25             {
26                 string str = e.Message;
27                 SqlConnection.Close();
28             }
29             SqlConnection.Close();
30         }
31 
32         public void DbRestore()
33         {
34             SqlConnection.Open();
35             try
36             {
37                 SqlCommandRestore.ExecuteNonQuery();
38             }
39             catch (Exception e)
40             {
41                 string str = e.Message;
42                 SqlConnection.Close();
43             }
44             SqlConnection.Close();
45         }
46     }
47 }

 

转载于:https://www.cnblogs.com/bravestarr/p/10598067.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值