300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > ASP.NET(C#)备份还原数据库

ASP.NET(C#)备份还原数据库

时间:2024-09-06 15:13:29

相关推荐

ASP.NET(C#)备份还原数据库

************************************************************************************************************

利用SQLDMO实现的,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了。

我把原作者的类扩充了一下,可以自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息。

需要注意的是还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:

Code

1createprockillspid(@dbnamevarchar(20))

2as

3begin

4declare@sqlnvarchar(500)

5declare@spidint

6set@sql='declaregetspidcursorfor

7selectspidfromsysprocesseswheredbid=db_id(mailto:%20%20%20+@dbname+%20%20%20)

8exec(@sql)

9opengetspid

10fetchnextfromgetspidinto@spid

11while@@fetch_status<>-1

12begin

13exec('killmailto:%20+@spid)

14fetchnextfromgetspidinto@spid

15end

16closegetspid

17deallocategetspid

18end

19GO

******************************************************************************************************************/

在还原之前先执行这个存储过程,需要传递dbname,就是你的数据库的名字。下边是类的原代码:(web.config里的数据库连接字符串是constr)

Code

1usingSystem;

2

3usingSystem.Configuration;

4

5usingSystem.Data.SqlClient;

6

7usingSystem.Data;

8

9namespaceweb.base_class

10

11{

12

13/**//**//**////<summary>

14

15///DbOper类,主要应用SQLDMO实现对MicrosoftSQLServer数据库的备份和恢复

16

17///</summary>

18

19publicclassDbOper

20

21{

22

23privatestringserver;

24

25privatestringuid;

26

27privatestringpwd;

28

29privatestringdatabase;

30

31privatestringconn;

32

33/**//**//**////<summary>

34

35///DbOper类的构造函数

36

37///</summary>

38

39publicDbOper()

40

41{

42

43conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();

44

45server=cut(conn,"server=",";");

46

47uid=cut(conn,"uid=",";");

48

49pwd=cut(conn,"pwd=",";");

50

51database=cut(conn,"database=",";");

52

53}

54

55publicstringcut(stringstr,stringbg,stringed)

56

57{

58

59stringsub;

60

61sub=str.Substring(str.IndexOf(bg)+bg.Length);

62

63sub=sub.Substring(0,sub.IndexOf(";"));

64

65returnsub;

66

67}

68

69

70

71/**//**//**////<summary>

72

73///数据库备份

74

75///</summary>

76

77publicboolDbBackup(stringurl)

78

79{

80

81SQLDMO.BackupoBackup=newSQLDMO.BackupClass();

82

83SQLDMO.SQLServeroSQLServer=newSQLDMO.SQLServerClass();

84

85try

86

87{

88

89oSQLServer.LoginSecure=false;

90

91oSQLServer.Connect(server,uid,pwd);

92

93oBackup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

94

95oBackup.Database=database;

96

97oBackup.Files=url;//"d:\Northwind.bak";

98

99oBackup.BackupSetName=database;

100

101oBackup.BackupSetDescription="数据库备份";

102

103oBackup.Initialize=true;

104

105oBackup.SQLBackup(oSQLServer);

106

107returntrue;

108

109}

110

111catch

112

113{

114

115returnfalse;

116

117throw;

118

119}

120

121finally

122

123{

124

125oSQLServer.DisConnect();

126

127}

128

129}

130

131

132

133/**//**//**////<summary>

134

135///数据库恢复

136

137///</summary>

138

139publicstringDbRestore(stringurl)

140

141{

142

143if(exepro()!=true)//执行存储过程

144

145{

146

147return"操作失败";

148

149}

150

151else

152

153{

154

155SQLDMO.RestoreoRestore=newSQLDMO.RestoreClass();

156

157SQLDMO.SQLServeroSQLServer=newSQLDMO.SQLServerClass();

158

159try

160

161{

162

163oSQLServer.LoginSecure=false;

164

165oSQLServer.Connect(server,uid,pwd);

166

167oRestore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

168

169oRestore.Database=database;

170

171oRestore.Files=url;//@"d:\Northwind.bak";

172

173oRestore.FileNumber=1;

174

175oRestore.ReplaceDatabase=true;

176

177oRestore.SQLRestore(oSQLServer);

178

179return"ok";

180

181}

182

183catch(Exceptione)

184

185{

186

187return"恢复数据库失败";

188

189throw;

190

191}

192

193finally

194

195{

196

197oSQLServer.DisConnect();

198

199}

200

201}

202

203}

204

205privateboolexepro()

206

207{

208

209SqlConnectionconn1=newSqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");

210

211SqlCommandcmd=newSqlCommand("killspid",conn1);

212

mandType=CommandType.StoredProcedure;

214

215cmd.Parameters.Add("@dbname","port");

216

217try

218

219{

220

221conn1.Open();

222

223cmd.ExecuteNonQuery();

224

225returntrue;

226

227}

228

229catch(Exceptionex)

230

231{

232

233returnfalse;

234

235}

236

237finally

238

239{

240

241conn1.Close();

242

243}

244

245

246

247}

248

249}

250

251}

252

253

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。