客户端备份和还原数据库(Asp.NET)
数据库备份和还原,在项目开发中很多客户都需要的功能。他们希望,点击备份按钮时,就可以把备份的数据库下载到本地保存。点击还原按钮时,把本地的数据库还原到服务器上。
虽然这样很不安全,但是在局域网内也是很有必要的。
这里运用到了几个知识点。
1:数据库备份,和还原(这里指Sql server)
2:文件的上传和下载。(为什么要用到文件上传和下载呢?这里有个很值得注意的问题,而且我在做项目时也经常会疏忽。我们在测试数据库备份和还原时,都是在本地进行的。也就是说,我们的电脑既做了客户端,又做了服务器。所以不管你怎么测试,只要代码没有写错就会成功的。一旦你在服务器上发布之后,再调试时就会出现,数据库备份在了服务器上,而且数据库还原也会失败。所以,这个时候你需要把数据库下载到本地保存,还原时把数据上传到服务器上,利用sql读取服务器上的路径执行还原操作。)
下面是我的代码。我把备份和还原封装在一个类里
public class OutData
{
/// <summary>
/// 备份数据库
///XianNingDSH 是我测试的数据库名
/// </summary>
public static int backData(string name)
{
string sqlStr = "use XianNingDSH; backup database XianNingDSH to disk='" + name+"'";
return ExecuteSql(sqlStr);
}
/// <summary>
///还原数据库
/// </summary>
public static int reBackData(string name)
{
string sqlStr = "use master;restore database XianNingDSH from disk='" + name + "'";
return ExecuteSql(sqlStr);
}
}
在前台:
protected void Button1_Click(object sender, EventArgs e)
{
//备份数据库
//随机生成备份数据库名
string filename = HttpUtility.UrlDecode(Request.Cookies["username"].Value) + DateTime.Now.Ticks.ToString() + "数据库备份.bak";
try
{
OutData(Server.MapPath("..") + "//UploadFile//" + filename);
addNote(filename); //把备份的数据完全路径保存到XML文件里
Jscript.AlertAndRedirect("备份数据成功!", "ImportData.aspx");
}
catch (Exception me)
{
Jscript.Alert(me.Message);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
//还原数据库
string dric = Server.MapPath("..") + "//UploadFile//" + FileUpload1.FileName;
FileUpload1.SaveAs(dric); //上传还原数据库到服务器上
try
{
OutData(dric);
Jscript.AlertAndRedirect("还原数据库成功!", "ImportData.aspx");
}
catch
{
Jscript.AlertAndRedirect("还原数据库失败!", "ImportData.aspx");
}
}
在处理下载服务器上的数据库文件时,不是以文件流的形式输出到本地的方式。而是把保存的数据库文件路径保存到xml文件里(dataConfig.xml)。
<?xml version="1.0" encoding="utf-8"?>
<dataconfig>
<data>
<time>备份时间</time>
<uname>备份人</uname>
<url>下载</url>
</data>
<data>
<time>2009-11-5 14:43:34</time>
<uname>admin</uname>
<url>admin633930290128125000备份.bak</url>
</data>
<data>
<time>2009-11-5 14:46:59</time>
<uname>admin</uname>
<url>admin633930292183593750备份.bak</url>
</data>
</dataconfig>
所以这里还需要用到对xml的文件的处理。我将在下篇博客里讲述关于对Xml文件的增删改查功能。
还要点要注意的时,如果我们是用VSS管理我们的项目时,需要对操作的xml文件属性设置为可读写。
下面是我的截图。