zoukankan      html  css  js  c++  java
  • C#代码备份还原MSSQL数据库

    备份数据库

    1///<summary>
    2/// 备份配置文件config.xml中数据库
    3///</summary>
    4///<param name="backupFolder">备份文件路径</param>
    5///<returns></returns>
    6publicstaticbool DataBackupConfigDB(string backupFolder)
    7 {
    8//获取配置文件中sql数据库名
    9string dbName ="SqlDB";
    10string name = dbName + DateTime.Now.ToString("yyyyMMddHHmmss");
    11string procname;
    12string 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;
    24try//如果逻辑设备不存在,略去错误
    25 {
    26 sqlcmd1.ExecuteNonQuery();
    27 }
    28catch
    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";
    45try
    46 {
    47int i = sqlcmd2.ExecuteNonQuery();
    48 }
    49catch (Exception err)
    50 {
    51string 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;
    57try
    58 {
    59 sqlcmd3.ExecuteNonQuery();
    60 }
    61catch (Exception err)
    62 {
    63string str = err.Message;
    64 conn.Close();
    65returnfalse;
    66 }
    67 conn.Close();//关闭数据库连接
    68returntrue;
    69 }

    还原数据库时如果使用RESTORE DATABASE dbName(数据库名) from DISK = 'e:\' to replace

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

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

    1 ///<summary>
    2  /// 还原数据库文件
    3  ///</summary>
    4  ///<param name="dbFile">数据库备份文件(含路径)</param>
    5  ///<returns></returns>
    6  publicstaticbool DataRestoreConfigDB(string dbFile)
    7 {
    8 //sql数据库名
    9 string dbName ="SqlDB";
    10 //创建连接对象
    11 SqlConnection conn =new SqlConnection(GetConnStr());
    12 //还原指定的数据库文件
    13 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);
    14 SqlCommand sqlcmd =new SqlCommand(sql, conn);
    15 sqlcmd.CommandType = CommandType.Text;
    16 conn.Open();
    17 try
    18 {
    19 sqlcmd.ExecuteNonQuery();
    20 }
    21 catch (Exception err)
    22 {
    23 string str = err.Message;
    24 conn.Close();
    25 returnfalse;
    26 }
    27 conn.Close();//关闭数据库连接
    28 returntrue;
    29 }
  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/12go/p/2317944.html
Copyright © 2011-2022 走看看