zoukankan      html  css  js  c++  java
  • 如何用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
  • 相关阅读:
    numpy.clip(a, a_min, a_max, out=None)(values < a_min are replaced with a_min, and those > a_max with a_max.)
    pytorch使用过程中遇到的一些问题
    conda管理包
    python argparse模块
    pytorch中设定使用指定的GPU
    Linux下dpkg的用法
    python pdb模块
    ubuntu SSH 连接、远程上传下载文件
    Linux中执行shell脚本命令的4种方法总结
    python linux安装anaconda
  • 原文地址:https://www.cnblogs.com/Terrylee/p/253667.html
Copyright © 2011-2022 走看看