您的位置:首页 > 编程语言 > ASP

用SQLDMO在ASP.NET中备份和还原数据库(SQLSERVER2000)

2011-01-10 11:00 573 查看
如何用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;­



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 }

­
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: