一个还原备份MS SQL Server数据库的页面.原理很清晰:备份很简单,不用多说;还原时可能有用户正在使用,这时要强制断开所有连接,然后再还原数据库.具体代码如下:
备份代码:
/// <summary>
/// 将数据库NorthWind备份到backup目录下的DB_年_月_日_时_分_秒.back
/// </summary>
protected void BackUp()
{
string fileName = Server.MapPath("backup/DB_"
+ DateTime.Now.ToString().Replace('-', '_').Replace(':', '_').Replace(' ', '_').Replace('/', '_') + ".bak");
try
{
DbHelperSQL.ExecuteSql("backup database NorthWind to disk='" + fileName + "'");
System.IO.FileInfo file = new System.IO.FileInfo(fileName);
Response.Clear();
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/ms-excel";
Response.WriteFile(file.FullName);
ApplicationInstance.CompleteRequest();
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('备份成功!')</script>");
}
catch (Exception ee)
{
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('备份失败!/r/n原因:"
+ ee.Message.Replace("'", "").Replace("/"", "").Replace("/r", "").Replace("/n", "") + "')</script>");
}
}
还原代码:
/// <summary>
/// 用备份文件fileName还原数据库NorthWind
/// </summary>
/// <param name="fileName"></param>
protected void Restore(string fileName)
{
try
{
string sql = null;
sql += "use master /r/n";
sql += "declare cssp cursor for select spid from sysprocesses where dbid=db_id('NorthWind') /r/n";
sql += "declare @sdid int /r/n";
sql += "open cssp /r/n";
sql += " fetch next from cssp into @sdid /r/n";
sql += " while @@fetch_status = 0 /r/n";
sql += " begin /r/n";
sql += " exec('kill [email='+@sdid]'+@sdid[/email]) /r/n";
sql += " fetch next from cssp into @sdid /r/n";
sql += " end /r/n";
sql += "close cssp /r/n";
sql += "deallocate cssp /r/n";
sql += "restore database NorthWind from disk='" + fileName + "'";
DbHelperSQL.ExecuteSql(sql);
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('还原成功!')</script>");
}
catch (Exception ee)
{
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('还原失败!原因:"
+ ee.Message.Replace("'", "").Replace("/"", "").Replace("/r", "").Replace("/n", "") + "')</script>");
}
}
备份代码:
/// <summary>
/// 将数据库NorthWind备份到backup目录下的DB_年_月_日_时_分_秒.back
/// </summary>
protected void BackUp()
{
string fileName = Server.MapPath("backup/DB_"
+ DateTime.Now.ToString().Replace('-', '_').Replace(':', '_').Replace(' ', '_').Replace('/', '_') + ".bak");
try
{
DbHelperSQL.ExecuteSql("backup database NorthWind to disk='" + fileName + "'");
System.IO.FileInfo file = new System.IO.FileInfo(fileName);
Response.Clear();
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/ms-excel";
Response.WriteFile(file.FullName);
ApplicationInstance.CompleteRequest();
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('备份成功!')</script>");
}
catch (Exception ee)
{
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('备份失败!/r/n原因:"
+ ee.Message.Replace("'", "").Replace("/"", "").Replace("/r", "").Replace("/n", "") + "')</script>");
}
}
还原代码:
/// <summary>
/// 用备份文件fileName还原数据库NorthWind
/// </summary>
/// <param name="fileName"></param>
protected void Restore(string fileName)
{
try
{
string sql = null;
sql += "use master /r/n";
sql += "declare cssp cursor for select spid from sysprocesses where dbid=db_id('NorthWind') /r/n";
sql += "declare @sdid int /r/n";
sql += "open cssp /r/n";
sql += " fetch next from cssp into @sdid /r/n";
sql += " while @@fetch_status = 0 /r/n";
sql += " begin /r/n";
sql += " exec('kill [email='+@sdid]'+@sdid[/email]) /r/n";
sql += " fetch next from cssp into @sdid /r/n";
sql += " end /r/n";
sql += "close cssp /r/n";
sql += "deallocate cssp /r/n";
sql += "restore database NorthWind from disk='" + fileName + "'";
DbHelperSQL.ExecuteSql(sql);
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('还原成功!')</script>");
}
catch (Exception ee)
{
Page.ClientScript.RegisterStartupScript(typeof(string), "message", "<script>alert('还原失败!原因:"
+ ee.Message.Replace("'", "").Replace("/"", "").Replace("/r", "").Replace("/n", "") + "')</script>");
}
}