************************************************************************************************************
利用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