在网站上备份数据库

1.前台页面

 <div>
需要备份的文件名:<asp:TextBox ID="bfFile" runat="server" Text="shuJuKu"></asp:TextBox>
<asp:Button ID="btnBak" runat="server" Text="备份" OnClick="btnBak_Click" />&nbsp;
<asp:Button ID="btnReduct" runat="server" Text="恢复" OnClick="btnReduct_Click" />&nbsp;
<asp:Button ID="btnDelete" runat="server" Text="删除备份文件" OnClick="btnDelete_Click" />&nbsp;
<asp:Button ID="btnDown" runat="server" Text="下载备份文件" OnClick="btnDown_Click" />
</div>

前台布局

2.后台代码

 //删除时用到的库
[DllImport("kernel32.dll")]
public static extern IntPtr _lopen(string lpPathName, int iReadWrite); [DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr hObject); public const int OF_READWRITE = ;
public const int OF_SHARE_DENY_NONE = 0x40;
public readonly IntPtr HFILE_ERROR = new IntPtr(-);

删除时用到的库

 protected void btnBak_Click(object sender, EventArgs e)
{
///
///备份方法
///
SqlConnection conn = new SqlConnection("Server=数据库ip地址;Database=要备份的数据库;User ID=用户名;Password=密码;");//连接数据库语句 SqlCommand cmdBK = new SqlCommand();
cmdBK.CommandType = CommandType.Text;
cmdBK.Connection = conn;
cmdBK.CommandText = @"backup database ccd to disk='"+this.bfFile.Text+".bak' with init";//数据备份语句:backup database 数据库名 to disk='保存路径\dbName.bak' try
{
conn.Open();
cmdBK.ExecuteNonQuery();
Response.Write("<script>alert(\"恭喜你,数据成功恢复为所选文档的状态!\");</script>");
}
catch (Exception ex)
{
Response.Write("<script>alert(\"" + ex.Message + "\");</script>");
}
finally
{
conn.Close();
conn.Dispose();
}
}

备份代码

 protected void btnDown_Click(object sender, EventArgs e)
{ //下载的文件和网页的是在同一服务器上 string fileName = "aaa.bak";//客户端保存的文件名
string filePath = Server.MapPath("aaa.bak");//路径 //以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, , bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}

下载代码

 protected void btnReduct_Click(object sender, EventArgs e)
{
///
///还原方法
/// ///杀死原来所有的数据库连接进程
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=数据库的IP地址;Initial Catalog=master;User ID=用户名;pwd=密码";
conn.Open();
string sql = "use [master] SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='要备份的数据库'";
SqlCommand cmd1 = new SqlCommand(sql, conn);
SqlDataReader dr;
ArrayList list = new ArrayList();
try
{
dr = cmd1.ExecuteReader();
while (dr.Read())
{
list.Add(dr.GetInt16());
}
dr.Close();
}
catch (SqlException eee)
{
Response.Write("<script>alert(\""+eee.ToString()+"\");</script>");
}
finally
{
conn.Close();
}
//MessageBox.Show(list.Count.ToString());
for (int i = ; i < list.Count; i++)
{
conn.Open();
cmd1 = new SqlCommand(string.Format("KILL {0}", list[i].ToString()), conn);
cmd1.ExecuteNonQuery();
conn.Close();
Response.Write("<script>alert(\"系统已经清除的数据库线程: " + list[i].ToString() + "\r\n正在还原数据库!");
}
//这里一定要是master数据库,而不能是要还原的数据库,因为这样便变成了有其它进程
//占用了数据库。
string constr = @"Data Source=数据库的IP地址;Initial Catalog=master;User ID=用户名;pwd=密码";
string database = "myNewDb";
//string path = "D:\\shuJuKu.bak"; string path = "" + bfFile.Text + ".bak"; string BACKUP = String.Format("RESTORE DATABASE {0} FROM DISK = '{1}' WITH MOVE ", database, path);//数据恢复语句:restore database 数据库名 from disk='保存路径\dbName.bak' WITH MOVE SqlConnection con = new SqlConnection(constr);
con.Open(); //string sql2 = "select name from sys.database_files";
string sql2 = "restore filelistonly from disk='" + path + "'";
SqlCommand cmd2 = new SqlCommand(sql2, con);
SqlDataReader dr2 = cmd2.ExecuteReader();
string str1 = "";
string str2 = "";
while(dr2.Read())
{
if (dr2["PhysicalName"].ToString().Contains("mdf"))
{
str1 = dr2["LogicalName"].ToString();
}
else if (dr2["PhysicalName"].ToString().Contains("ldf"))
{
str2 = dr2["LogicalName"].ToString();
}
}
dr2.Close(); BACKUP += "'"+str1+"' TO 'd:\\sjk.mdf',";///------数据文件还原后存放的新位置
BACKUP += "MOVE '"+str2+"' TO 'd:\\sjk.ldf'";//----日志文件还原后存放的新位置 //BACKUP += "'" + str1 + "' TO 'd:\\shujuku.mdf',";///------数据文件还原后存放的新位置
//BACKUP += "MOVE '" + str2 + "' TO 'd:\\shujuku.ldf'";//----日志文件还原后存放的新位置 SqlCommand cmd = new SqlCommand(BACKUP, con); try
{
cmd.ExecuteNonQuery();
Response.Write("<script>alert(\"还原成功,点击退出系统!\");</script>");
//Application.Exit();
conn.Close();
conn.Dispose();
}
catch (SqlException ee)
{ Response.Write("<script>alert(\""+ee.ToString()+"\");</script>"); }
finally
{
con.Close();
}
}
 protected void btnDelete_Click(object sender, EventArgs e)
{ //不能在服务器上删除,只能手动删除 ///
///删除方法
///
//本地的文件删除,网页和服务器在同一ip下,删除的文件路径需要完整的文件路径 string vFileName = @"D:\\aaa.bak";
if (!File.Exists(vFileName))
{//判断文件是否存在
Response.Write("<script>alert(\"文件都不存在,你就不要拿来耍了\");</script>");
return;
}
IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);
if (vHandle == HFILE_ERROR)
{//判断文件是否被占用
Response.Write("<script>alert(\"文件被占用!\");</script>");
return;
}
else
{
CloseHandle(vHandle);
Response.Write("<script>alert(\"没有被占用!\");</script>"); FileInfo file = new FileInfo("D:\\aaa.bak");
file.Delete(); }
}

我只是实现了在服务器上的备份和还原数据库,网页和数据库在同一服务器上下载文件

最新文章

  1. ajax请求和aspx返回数据
  2. iOS开发入门知识归纳
  3. java install
  4. java.rmi.NoSuchObjectException: no such object in table
  5. shell脚本参数
  6. Hibernate逍遥游记-第5章映射一对多-01单向&lt;many-to-one&gt;、cascade=&quot;save-update&quot;、lazy、TransientObjectException
  7. 解决eclipse闪退的办法
  8. ASP.NET 获取来源网站的网址,获取上一网页的网址,获取来源网页的URL,获取上一网页的URL
  9. INTELLIJ IDEA集成CHECKSTYLE(转)
  10. Linux c 信号量
  11. iOS8的屏幕旋转的问题
  12. Python与JavaWeb的第一次碰撞
  13. 阿里云负载均衡SSL证书配置(更新)
  14. 关于用IIS在.net平台发布网页的一些坑
  15. SAP 官网中文帮助文件&amp;BP中文资料汇总
  16. Java全栈程序员之03:Ubuntu下安装idea
  17. TypeScript 之 JSX
  18. ctags简易用法
  19. mime设置
  20. Flexvolume

热门文章

  1. fullpage中高度错误的解决方法
  2. 【eclipse插件开发实战】Eclipse插件开发1——eclipse内核结构、扩展点机制
  3. 20个Flutter实例视频教程-第12节: 流式布局 模拟添加照片效果
  4. Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量
  5. Jmeter调用JAVA jar包传参
  6. 百度地图API示例 JS
  7. C#基础知识回顾
  8. bzoj3771: Triple(容斥+生成函数+FFT)
  9. [Xcode 实际操作]一、博主领进门-(2)第一个工程项目:将导入的图片显示到屏幕上
  10. 端口渗透&#183;网站渗透过程 --21 ,22,873,3306,6379,8080(8080端口是针对CMS的渗透)