C#代码备份还原MSSQL数据库

备份数据库

[c-sharp] view plain copy print ?
  1. /// <summary> 
  2.        /// 备份配置文件config.xml中数据库 
  3.        /// </summary> 
  4.        /// <param name="backupFolder">备份文件路径</param> 
  5.        /// <returns></returns> 
  6.        public static bool DataBackupConfigDB(string backupFolder) 
  7.        { 
  8.            //获取配置文件中sql数据库名 
  9.            string dbName = "SqlDB"
  10.            string name = dbName + DateTime.Now.ToString("yyyyMMddHHmmss"); 
  11.            string procname; 
  12.            string sql; 
  13.            //创建连接对象 
  14.            SqlConnection conn = new SqlConnection(GetConnStr()); 
  15.            conn.Open();        //打开数据库连接 
  16.            //删除逻辑备份设备,但不会删掉备份的数据库文件 
  17.            procname = "sp_dropdevice"
  18.            SqlCommand sqlcmd1 = new SqlCommand(procname, conn); 
  19.            sqlcmd1.CommandType = CommandType.StoredProcedure; 
  20.            SqlParameter sqlpar = new SqlParameter(); 
  21.            sqlpar = sqlcmd1.Parameters.Add("@logicalname", SqlDbType.VarChar, 20); 
  22.            sqlpar.Direction = ParameterDirection.Input; 
  23.            sqlpar.Value = dbName; 
  24.            try        //如果逻辑设备不存在,略去错误 
  25.            { 
  26.                sqlcmd1.ExecuteNonQuery(); 
  27.            } 
  28.            catch 
  29.            { 
  30.                MessageBox.Show("错误的备份文件目录"); 
  31.            } 
  32.            //创建逻辑备份设备 
  33.            procname = "sp_addumpdevice"
  34.            SqlCommand sqlcmd2 = new SqlCommand(procname, conn); 
  35.            sqlcmd2.CommandType = CommandType.StoredProcedure; 
  36.            sqlpar = sqlcmd2.Parameters.Add("@devtype", SqlDbType.VarChar, 20); 
  37.            sqlpar.Direction = ParameterDirection.Input; 
  38.            sqlpar.Value = "disk"
  39.            sqlpar = sqlcmd2.Parameters.Add("@logicalname", SqlDbType.VarChar, 20);//逻辑设备名 
  40.            sqlpar.Direction = ParameterDirection.Input; 
  41.            sqlpar.Value = dbName; 
  42.            sqlpar = sqlcmd2.Parameters.Add("@physicalname", SqlDbType.NVarChar, 260);//物理设备名 
  43.            sqlpar.Direction = ParameterDirection.Input; 
  44.            sqlpar.Value = backupFolder + name + ".bak"
  45.            try 
  46.            { 
  47.                int i = sqlcmd2.ExecuteNonQuery(); 
  48.            } 
  49.            catch (Exception err) 
  50.            { 
  51.                string str = err.Message; 
  52.            } 
  53.            //备份数据库到指定的数据库文件(完全备份) 
  54.            sql = "BACKUP DATABASE " + dbName + " TO " + dbName + " WITH INIT"
  55.            SqlCommand sqlcmd3 = new SqlCommand(sql, conn); 
  56.            sqlcmd3.CommandType = CommandType.Text; 
  57.            try 
  58.            { 
  59.                sqlcmd3.ExecuteNonQuery(); 
  60.            } 
  61.            catch (Exception err) 
  62.            { 
  63.                string str = err.Message; 
  64.                conn.Close(); 
  65.                return false
  66.            } 
  67.            conn.Close();//关闭数据库连接 
  68.            return true
  69.        } 

还原数据库时如果使用

RESTORE DATABASE dbName(数据库名) from DISK = 'e:/' to replace

sql错误提示:RESTORE 无法处理数据库dbName 因为它正由此会话使用 建议在执行此操作时使用 master 数据库

在网上终于找到了解决方法,具体代码如下:

[c-sharp] view plain copy print ?
  1. /// <summary> 
  2. /// 还原数据库文件 
  3. /// </summary> 
  4. /// <param name="dbFile">数据库备份文件(含路径)</param> 
  5. /// <returns></returns> 
  6. public static bool DataRestoreConfigDB(string dbFile) 
  7.     //sql数据库名 
  8.     string dbName = "SqlDB"
  9.     //创建连接对象 
  10.     SqlConnection conn = new SqlConnection(GetConnStr()); 
  11.     //还原指定的数据库文件 
  12.     string sql =string.Format("use master ;declare @s varchar(8000);select @s=isnull(@s,'')+' kill '+rtrim(spID) from master..sysprocesses where dbid=db_id('{0}');select @s;exec(@s) ;RESTORE DATABASE {1} FROM DISK = N'{2}' with replace",dbName,dbName,dbFile); 
  13.     SqlCommand sqlcmd = new SqlCommand(sql, conn); 
  14.     sqlcmd.CommandType = CommandType.Text; 
  15.     conn.Open(); 
  16.     try 
  17.     { 
  18.         sqlcmd.ExecuteNonQuery(); 
  19.     } 
  20.     catch (Exception err) 
  21.     { 
  22.         string str = err.Message; 
  23.         conn.Close(); 
  24.         return false
  25.     } 
  26.     conn.Close();//关闭数据库连接 
  27.     return true

http://blog.csdn.net/dinid/article/details/6216767 转载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值