• 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复


    我们知道,用SQLDMO可以实现对数据库的备份与恢复,下面给出简单的实现方法。
    首先需要添加对SQLDMO引用

    1.实现数据库的备份:
     1/// <summary>
     2        /// 数据库备份
     3        /// </summary>
     4        /// <returns>备份是否成功</returns>

     5        public bool DbBackup()
     6        {
     7            string path = CreatePath();
     8            SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
     9            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    10            try
    11            {
    12                oSQLServer.LoginSecure = false;
    13                oSQLServer.Connect(server,uid, pwd);
    14                oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    15                oBackup.Database = database;
    16                oBackup.Files = path;
    17                oBackup.BackupSetName = database;
    18                oBackup.BackupSetDescription = "数据库备份";
    19                oBackup.Initialize = true;
    20                oBackup.SQLBackup(oSQLServer);
    21
    22                return true;
    23            }

    24            catch(Exception ex)
    25            {
    26                return false;
    27                throw ex;
    28            }

    29            finally
    30            {
    31                oSQLServer.DisConnect();
    32            }

    33        }

    2.实现数据库恢复:
    在恢复时要注意先杀掉当前数据库的所有进程
     1/// <summary>
     2        /// 数据库恢复
     3        /// </summary>

     4        public string DbRestore()
     5        {
     6            if(exepro()!=true)//执行存储过程
     7            {
     8                return "操作失败";
     9            }

    10            else
    11            {
    12                SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
    13                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    14                try
    15                {
    16                    exepro();
    17                    oSQLServer.LoginSecure = false;
    18                    oSQLServer.Connect(server, uid, pwd);
    19                    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    20                    oRestore.Database = database;
    21                    ///自行修改
    22                    oRestore.Files = @"d:\aaa\aaa.bak";
    23                    oRestore.FileNumber = 1;
    24                    oRestore.ReplaceDatabase = true;
    25                    oRestore.SQLRestore(oSQLServer);
    26
    27                    return "ok";
    28                }

    29                catch(Exception e)
    30                {
    31                    return "恢复数据库失败";
    32                    throw e;
    33                }

    34                finally
    35                {
    36                    oSQLServer.DisConnect();
    37                }

    38            }

    39        }

    40        
    41        /// <summary>
    42        /// 杀死当前库的所有进程
    43        /// </summary>
    44        /// <returns></returns>

    45        private bool exepro()
    46        {
    47
    48            SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
    49            SqlCommand cmd = new SqlCommand("killspid",conn1);
    50            cmd.CommandType = CommandType.StoredProcedure;
    51            cmd.Parameters.Add("@dbname","aaa");
    52            try
    53            {
    54                conn1.Open();
    55                cmd.ExecuteNonQuery();
    56                return true;
    57            }

    58            catch(Exception ex)
    59            {
    60                return false;
    61            }

    62            finally
    63            {
    64                conn1.Close();
    65            }

    66        }

    完整的操作类如下:
      1using System;
      2using System.Collections;
      3using System.Data;
      4using System.Data.SqlClient;
      5
      6namespace DbBackUp
      7{
      8    /// <summary>
      9    /// 创建人:Terrylee
     10    /// 创建时间:2005年8月1日
     11    /// 功能描述:实现数据库的备份和还原
     12    /// 更新记录:
     13    /// </summary>

     14    public class DbOperate
     15    {    
     16        /// <summary>
     17        /// 服务器
     18        /// </summary>

     19        private string server;
     20        
     21        /// <summary>
     22        /// 登录名
     23        /// </summary>

     24        private string uid;
     25        
     26        /// <summary>
     27        /// 登录密码
     28        /// </summary>

     29        private string pwd;
     30        
     31        /// <summary>
     32        /// 要操作的数据库
     33        /// </summary>

     34        private string database;
     35        
     36        /// <summary>
     37        /// 数据库连接字符串
     38        /// </summary>

     39        private string conn;
     40
     41        /// <summary>
     42        /// DbOperate类的构造函数
     43        /// 在这里进行字符串的切割,获取服务器,登录名,密码,数据库
     44        /// </summary>

     45        public DbOperate()
     46        {
     47            conn = System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
     48            server = StringCut(conn,"server=",";");
     49            uid = StringCut(conn,"uid=",";");
     50            pwd = StringCut(conn,"pwd=",";");
     51            database = StringCut(conn,"database=",";");
     52        }

     53        
     54        /// <summary>
     55        /// 切割字符串
     56        /// </summary>
     57        /// <param name="str"></param>
     58        /// <param name="bg"></param>
     59        /// <param name="ed"></param>
     60        /// <returns></returns>

     61        public string StringCut(string str,string bg,string ed)
     62        {
     63            string sub;
     64            sub=str.Substring(str.IndexOf(bg)+bg.Length);
     65            sub=sub.Substring(0,sub.IndexOf(";"));
     66            return sub;
     67        }

     68        
     69        /// <summary>
     70        /// 构造文件名
     71        /// </summary>
     72        /// <returns>文件名</returns>

     73        private string CreatePath()
     74        {
     75            string CurrTime = System.DateTime.Now.ToString();
     76            CurrTime = CurrTime.Replace("-","");
     77            CurrTime = CurrTime.Replace(":","");
     78            CurrTime = CurrTime.Replace(" ","");
     79            CurrTime = CurrTime.Substring(0,12);
     80            string path = @"d:\\aaa\\";
     81            path += database;
     82            path += "_db_";
     83            path += CurrTime;
     84            path += ".BAK";
     85            return path;
     86        }

     87
     88        /// <summary>
     89        /// 数据库备份
     90        /// </summary>
     91        /// <returns>备份是否成功</returns>

     92        public bool DbBackup()
     93        {
     94            string path = CreatePath();
     95            SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
     96            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
     97            try
     98            {
     99                oSQLServer.LoginSecure = false;
    100                oSQLServer.Connect(server,uid, pwd);
    101                oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    102                oBackup.Database = database;
    103                oBackup.Files = path;
    104                oBackup.BackupSetName = database;
    105                oBackup.BackupSetDescription = "数据库备份";
    106                oBackup.Initialize = true;
    107                oBackup.SQLBackup(oSQLServer);
    108
    109                return true;
    110            }

    111            catch(Exception ex)
    112            {
    113                return false;
    114                throw ex;
    115            }

    116            finally
    117            {
    118                oSQLServer.DisConnect();
    119            }

    120        }

    121
    122        /// <summary>
    123        /// 数据库恢复
    124        /// </summary>

    125        public string DbRestore()
    126        {
    127            if(exepro()!=true)//执行存储过程
    128            {
    129                return "操作失败";
    130            }

    131            else
    132            {
    133                SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
    134                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    135                try
    136                {
    137                    exepro();
    138                    oSQLServer.LoginSecure = false;
    139                    oSQLServer.Connect(server, uid, pwd);
    140                    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    141                    oRestore.Database = database;
    142                    ///自行修改
    143                    oRestore.Files = @"d:\aaa\aaa.bak";
    144                    oRestore.FileNumber = 1;
    145                    oRestore.ReplaceDatabase = true;
    146                    oRestore.SQLRestore(oSQLServer);
    147
    148                    return "ok";
    149                }

    150                catch(Exception e)
    151                {
    152                    return "恢复数据库失败";
    153                    throw e;
    154                }

    155                finally
    156                {
    157                    oSQLServer.DisConnect();
    158                }

    159            }

    160        }

    161        
    162        /// <summary>
    163        /// 杀死当前库的所有进程
    164        /// </summary>
    165        /// <returns></returns>

    166        private bool exepro()
    167        {
    168
    169            SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
    170            SqlCommand cmd = new SqlCommand("killspid",conn1);
    171            cmd.CommandType = CommandType.StoredProcedure;
    172            cmd.Parameters.Add("@dbname","aaa");
    173            try
    174            {
    175                conn1.Open();
    176                cmd.ExecuteNonQuery();
    177                return true;
    178            }

    179            catch(Exception ex)
    180            {
    181                return false;
    182            }

    183            finally
    184            {
    185                conn1.Close();
    186            }

    187        }

    188
    189    }

    190
    191}

    192

    在相应的按钮
    1<asp:Button id="wbtn_Backup" runat="server" Width="60px" Text="备 份" CssClass="Button"></asp:Button>
    单击事件里调用即可:
     1/// <summary>
     2        /// 备份按钮
     3        /// </summary>
     4        /// <param name="sender"></param>
     5        /// <param name="e"></param>

     6        private void wbtn_Backup_Click(object sender, System.EventArgs e)
     7        {
     8            DbOperate dbop = new DbOperate();
     9            dbop.DbBackup();
    10        }
    ^_^
    支持TerryLee的创业产品Worktile
    Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
    https://worktile.com
  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/Terrylee/p/253667.html
Copyright © 2020-2023  润新知