问题描述:
如何通过 Web 方式把服务器端的数据库备份到本地的电脑硬盘中?
如何通过 Web 方式把服务器端的数据库备份到本地的电脑硬盘中?
解决思路:
1. 首先必须保证Web站点和数据库部署在同一台服务器上。
数据库备份时只能备份到本地硬盘上,如果数据库和
Web
服务器不在同一台服务器上,那么通过
Web
站点下载数据库服务器上的数据库备份比较麻烦,我们后面再介绍如何解决不在同一台服务器上的情况。
2. 通过SQLDMO将数据库备份到服务器上的指定位置。
我们可以通过
SQLDMO
来实现数据库的备份,那么要访问
SQLDMO
,我们必须通过添加对
SQLDMO COM
组件的引用,通过添加
References
,弹出对话框中,选择
COM
选项卡,然后找到组件:
Microsoft SQLDMO Object Library
,点击确定,把组件添加到我们的
Web Site
中,然后通过以下代码可以对数据库进行备份
其中,
strFileName
是数据库备份保存的位置(服务器上的位置),为了下载的实现简单一点,我们通过将
strFileName
设置为
Web
项目的虚拟目录下,我们可以设置为根目录下
,
那么
strFileName = Server.MapPath(“/Db.bak”);
1
public
bool
BackUPDB(
string
ServerName,
string
UserName,
string
Password,
string
strDbName,
string
strFileName)
2 {
3
4 SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
5
6 try
7
8 {
9
10 svr.Connect(ServerName, UserName, Password);
11
12 SQLDMO.Backup bak = new SQLDMO.BackupClass();
13
14 bak.Action = 0;
15
16 bak.Initialize = true;
17
18 bak.Files = strFileName;
19
20 bak.Database = strDbName;
21
22 bak.SQLBackup(svr);
23
24 return true;
25
26 }
27
28 catch (Exception err)
29
30 {
31
32 throw new Exception("备份数据库失败:" + err.Message);
33
34 }
35
36 finally
37
38 {
39
40 svr.DisConnect();
41
42 }
43
44}
45
2 {
3
4 SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
5
6 try
7
8 {
9
10 svr.Connect(ServerName, UserName, Password);
11
12 SQLDMO.Backup bak = new SQLDMO.BackupClass();
13
14 bak.Action = 0;
15
16 bak.Initialize = true;
17
18 bak.Files = strFileName;
19
20 bak.Database = strDbName;
21
22 bak.SQLBackup(svr);
23
24 return true;
25
26 }
27
28 catch (Exception err)
29
30 {
31
32 throw new Exception("备份数据库失败:" + err.Message);
33
34 }
35
36 finally
37
38 {
39
40 svr.DisConnect();
41
42 }
43
44}
45
3. 下载数据库备份
根据
2.
中的数据库备份文件
,我们知道待下载的备份文件为:
file= Server.MapPath(“/Db.bak”);
这样我们就可以通过调用
Download(file)
下载数据库备份。
1
public
void
Download(
string
file)
2
3 {
4
5 FileInfo fi = new FileInfo(file);
6
7 Response.AddHeader("Content-Length", fi.Length.ToString());
8
9 Response.ContentType = "application/octet-stream";
10
11 Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", HttpUtility.UrlEncode(file, Encoding.UTF8)));
12
13
14
15 Response.WriteFile(file);
16
17 }
18
2
3 {
4
5 FileInfo fi = new FileInfo(file);
6
7 Response.AddHeader("Content-Length", fi.Length.ToString());
8
9 Response.ContentType = "application/octet-stream";
10
11 Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", HttpUtility.UrlEncode(file, Encoding.UTF8)));
12
13
14
15 Response.WriteFile(file);
16
17 }
18
注意:为了能够让用户可以下载备份,我们必须将数据库备份到
Web
项目的
IIS
目录下
4. 解决办法存在的不足和改进。
通过以上两个步骤就是实现通过
Web
方式备份数据库并保存到本地硬盘,但是前提是
Web
和数据库必须部署在同一台服务器上。
那么,如果
Web
站点和数据库部署在不同机器上如何解决呢?其实也类是,只要保证我们数据库的备份文件保存位置对
Web
项目来说是透明的,而且通过
Web
可以访问得到就可以了。
比如,我们可以通过在数据库服务器上建立一个虚拟目录,指向数据库备份的位置,然后
Web
中就可以根据虚拟目录访问到备份文件。或者也可以建立一个
ftp
目录指向数据库备份位置,
Web
中通过
ftp
协议来下载备份文件。当然也可以通过
Remoting Service
来实现。