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

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

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

 5        public bool DbBackup()
 6ExpandedBlockStart.gifContractedBlock.gif        {
 7            string path = CreatePath();
 8            SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
 9            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
10            try
11ExpandedSubBlockStart.gifContractedSubBlock.gif            {
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)
25ExpandedSubBlockStart.gifContractedSubBlock.gif            {
26                return false;
27                throw ex;
28            }

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

33        }

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

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

10            else
11ExpandedSubBlockStart.gifContractedSubBlock.gif            {
12                SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
13                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
14                try
15ExpandedSubBlockStart.gifContractedSubBlock.gif                {
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;
21ExpandedSubBlockStart.gifContractedSubBlock.gif                    /**////自行修改
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)
30ExpandedSubBlockStart.gifContractedSubBlock.gif                {
31                    return "恢复数据库失败";
32                    throw e;
33                }

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

38            }

39        }

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

45        private bool exepro()
46ExpandedBlockStart.gifContractedBlock.gif        {
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
53ExpandedSubBlockStart.gifContractedSubBlock.gif            {
54                conn1.Open();
55                cmd.ExecuteNonQuery();
56                return true;
57            }

58            catch(Exception ex)
59ExpandedSubBlockStart.gifContractedSubBlock.gif            {
60                return false;
61            }

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

66        }

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

 14    public class DbOperate
 15ExpandedSubBlockStart.gifContractedSubBlock.gif    {    
 16ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 17        /// 服务器
 18        /// </summary>

 19        private string server;
 20        
 21ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 22        /// 登录名
 23        /// </summary>

 24        private string uid;
 25        
 26ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 27        /// 登录密码
 28        /// </summary>

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

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

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

 45        public DbOperate()
 46ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 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        
 54ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <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)
 62ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 63            string sub;
 64            sub=str.Substring(str.IndexOf(bg)+bg.Length);
 65            sub=sub.Substring(0,sub.IndexOf(";"));
 66            return sub;
 67        }

 68        
 69ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 70        /// 构造文件名
 71        /// </summary>
 72        /// <returns>文件名</returns>

 73        private string CreatePath()
 74ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 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
 88ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 89        /// 数据库备份
 90        /// </summary>
 91        /// <returns>备份是否成功</returns>

 92        public bool DbBackup()
 93ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 94            string path = CreatePath();
 95            SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
 96            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
 97            try
 98ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 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)
112ExpandedSubBlockStart.gifContractedSubBlock.gif            {
113                return false;
114                throw ex;
115            }

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

120        }

121
122ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
123        /// 数据库恢复
124        /// </summary>

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

131            else
132ExpandedSubBlockStart.gifContractedSubBlock.gif            {
133                SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
134                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
135                try
136ExpandedSubBlockStart.gifContractedSubBlock.gif                {
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;
142ExpandedSubBlockStart.gifContractedSubBlock.gif                    /**////自行修改
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)
151ExpandedSubBlockStart.gifContractedSubBlock.gif                {
152                    return "恢复数据库失败";
153                    throw e;
154                }

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

159            }

160        }

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

166        private bool exepro()
167ExpandedSubBlockStart.gifContractedSubBlock.gif        {
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
174ExpandedSubBlockStart.gifContractedSubBlock.gif            {
175                conn1.Open();
176                cmd.ExecuteNonQuery();
177                return true;
178            }

179            catch(Exception ex)
180ExpandedSubBlockStart.gifContractedSubBlock.gif            {
181                return false;
182            }

183            finally
184ExpandedSubBlockStart.gifContractedSubBlock.gif            {
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>
单击事件里调用即可:
 1ExpandedBlockStart.gifContractedBlock.gif/**//// <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)
 7ExpandedBlockStart.gifContractedBlock.gif        {
 8            DbOperate dbop = new DbOperate();
 9            dbop.DbBackup();
10        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TP4056 实现可编程锂电充电器+电量计

本文作者&#xff1a;t3486784401链接&#xff1a;https://www.mydigit.cn/forum.php?modviewthread&tid250916&extra手头有些容量非常小的软包锂电&#xff0c;直接使用市面上的大功率充电板&#xff08;500mA/1A&#xff09;倍率太大&#xff0c;容易损坏电池。索性…

电车防盗报警器电路原来是这样的!

前几天电路菌从电车上拆开了一个防盗报警器&#xff0c;今天来看看防盗报警器这内部的电路到底是怎样的&#xff01;上图就是防盗报警器的主机&#xff0c;引出来的这根黑线是天线。在防盗报警主机的侧面&#xff0c;可以看到印刷有文字“RP-48V-64V”&#xff0c;应该是指这主…

每日一题(14)—— 交换a,b的值(不使用中间变量)

如何将a,b的值进行交换&#xff0c;并且不使用任何中间变量&#xff1f; 推荐答案&#xff1a; a a ^ b; b a ^ b; a a ^ b; 下面的答案不好&#xff0c;可能会导致越界的问题 a a b; // 可能越界 b a - b; a a - b;

买到假芯片,血的教训!

关注星标公众号&#xff0c;不错过精彩内容作者 | 写代码的篮球球痴素材来源 | 云汉芯城2021年太难了&#xff0c;芯片涨价不说&#xff0c;涨价之后还买不到芯片&#xff0c;芯片交货周期已经超过一年了。嵌入式Linux1涨价、缺货 ——> 翻新、假货在芯片涨价、缺货的背景下…

Windows 7 :微软目前最好的操作系统

好消息&#xff0c;各位&#xff01;如果你是 PC 用户&#xff0c;如果你仍然在使用有 8 年历史的 Windows XP&#xff0c;或者令人讨厌的 Windows Vista &#xff0c;现在你终于可以解脱了&#xff1a;Windows 7 就在眼前。微软交付了一套设计巧妙、改进巨大的操作系统&#x…

[Robot Framework] 怎么做数学运算?

运用BuiltIn里面的Set Variable 转载于:https://www.cnblogs.com/MasterMonkInTemple/p/9020406.html

解剖几个有点难度的C笔试题

总结了几个比较经典的笔试题目&#xff0c;这些题目是在面试中遇到的&#xff0c;有难度&#xff0c;但是不是那种特别难的&#xff0c;比较有代表性&#xff0c;如果正在找工作的话&#xff0c;可以看看&#xff0c;丰富一下自己的知识库。1.题目一求下面代码输出&#xff1a;…

亲试白天使:华硕家用级无线路由RT-N11+

拿到机子2个礼拜&#xff0c;说实话&#xff0c;对于我来说&#xff0c;家庭用ASUS RT-N11还是很够给力的。 华硕RT-N11产品资料 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />无线网络 802.11n Draft 2.0 WAN接口 100Mbps1 L…

基于PHP实现一个简单的在线聊天功能(轮询ajax )

基于PHP实现一个简单的在线聊天功能&#xff08;轮询ajax &#xff09; 一、总结 1、用的轮询ajax 二、基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻烦的是前端展..于是.. 需求分析 要实现功能,首先要做前端,经过…

C笔试题指针

解剖几个有点难度的C笔试题昨天写的那个面试题&#xff0c;今天在群里讨论&#xff0c;有个同学加工了下&#xff0c;变成了新的题目&#xff0c;写出来大家一起看看。#include <stdio.h> struct node {int a;int b;int c; }; int main() {struct node s {3,5,6};int*pt …

Web安全渗透测试之信息搜集篇(上)

通过使用搜索引擎、扫描器、发送简单的HTTP请求或者专门精心制作的请求&#xff0c;都有可能导致应用程序泄漏诸如错误信息、版本信息以及所使用的技术等信息。 一、测试robots.txt文件 现在&#xff0c;我们首先介绍如何测试robots.txt文件。Web蜘蛛/机器人/爬虫可以用来检索网…

数据结构之线性结构之堆栈

二&#xff0c;堆栈 中缀表达式&#xff1a;运算符位于两数之后&#xff1b; ab*c-d/e 后缀表达式&#xff1a;运算符位于两数之后&#xff1b; abc*de/-&#xff1b;计算机表示式求解时的读法&#xff1b;用堆栈实现计算 前缀表达式&#xff1a;运算符位于两数之前&#xff1b…

Qt 开源作品 | 小伙子,给你的 Linux 系统写个 Launcher 吧

今天给大家分享一下&#xff1a;如何用 Qt 实现一个 launcher (程序启动器)。运行效果&#xff1a;github 链接&#xff1a;https://github.com/alamminsalo/qml-launcher代码很少&#xff0c;C 部分大约 100行代码。下面是实现过程。1. 创建 QML 应用在 Qt Creator 依次点击&a…

Sourcetail 一款代码编辑神器,让看源码如丝般顺滑

大家好&#xff0c;我是小麦&#xff0c;上一次的文章《一个超级实用的源码阅读小技巧》&#xff0c;我简单提到通过gccegyptgraphviz(dot)这三个工具&#xff0c;快速生成函数调用图&#xff0c;总体来说也非常好用。众所周知VSCode&#xff0c;Sorceinsight非常好用&#xff…

CPU占用率是什么?

这是昨晚上在朋友圈发的一个讨论回答的问题很多因为这个问题&#xff0c;我晚上也没早睡&#xff0c;就想把这个讲清楚说这个问题之前我们先了解下时间片调度算法&#xff0c;因为用这个来讲比较清楚。CPU可以执行任务&#xff0c;CPU给哪个进程执行&#xff0c;哪个进程就可以…

长大了,也弄丢了很多东西

小明要回家处理父亲的头七&#xff0c;那天晚上跟他喝酒聊天&#xff0c;我们说对生活的一些计划&#xff0c;比如计划让小孩上哪所小学&#xff0c;比如上小学了上哪所初中&#xff0c;高中&#xff0c;报什么课外兴趣班等等。吃过苦的孩子心里都有一种执念&#xff0c;想让自…

我的爹,我的娘(2006-02-22 21:39:07)(新浪)

爸爸妈妈是农民&#xff08;我也是&#xff09;&#xff0c;都已年过半百。他们很忙碌&#xff0c;闲不下来.爸爸头发这几年越来越少了&#xff0c;头发也白了不少&#xff0c;但坚持经常染发&#xff0c;因为他说&#xff0c;怕我的小兄弟产生为什么别人爸爸这么年轻的想法。我…

200个模块,怎么用有线的方式进行组网通信

这是一个读者私聊我的问题&#xff0c;我觉得比较有意思&#xff0c;发出来大家一起讨论&#xff0c;我相信在讨论后&#xff0c;会有更加好的的方案。问题有200个模块&#xff0c;这200个模块需要和主CPU进行通信&#xff0c;每个模块的距离大概在30~50cm之间&#xff0c;用怎…

两招让陌生网络访问者现出原形

当我们关闭计算机时&#xff0c;经常出现“有一台计算机与你的电脑有连接,如果关闭将中断数据”的提示&#xff0c;尤其是在局域网中这种提示更是经常出现。其实这是因为别人通过网络正在访问自己电脑上的共享资源呢!面对如此恶劣的行动&#xff0c;难道只能任其胡作非为吗!当然…

网易创始人之一,周卓林先生

这篇文章的主人公我觉得对我们做技术的人非常有借鉴作用。大学的时候&#xff0c;我们老师就一直强调&#xff0c;一命&#xff0c;二运&#xff0c;三风水&#xff0c;四积德&#xff0c;五读书&#xff0c;后面我就不记得了。1、1997年2月&#xff0c;周卓林上Hotmail&#x…