c#网站对服务器的数据库的备份与还原
在网站上备份数据库
1.前台页面
<div>
需要备份的文件名:<asp:TextBox ID="bfFile" runat="server" Text="shuJuKu"></asp:TextBox>
<asp:Button ID="btnBak" runat="server" Text="备份" OnClick="btnBak_Click" />
<asp:Button ID="btnReduct" runat="server" Text="恢复" OnClick="btnReduct_Click" />
<asp:Button ID="btnDelete" runat="server" Text="删除备份文件" OnClick="btnDelete_Click" />
<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(); }
}
我只是实现了在服务器上的备份和还原数据库,网页和数据库在同一服务器上下载文件
c#网站对服务器的数据库的备份与还原的更多相关文章
- SQLServer2008修改sa密码的方法与SQL server 2008数据库的备份与还原
sa密码的修改转载自:http://blog.csdn.net/templar1000/article/details/20211191 SQL server 2008数据库的备份与还原转自 :htt ...
- mysql数据库的备份和还原的总结
mysql数据库的备份和还原的总结 (来自一运维同事的总结) 1. 备份方式: 热备:数据库在线进行备份,不影响读和写的在线备份方式! 温备:数据库在线进行备份,对表备份时先锁定写操作,仅可以执行读操 ...
- 用分离、附加的方式实现sql server数据库的备份和还原
一.数据库分离.附加的说明 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用 ...
- SQL Serever学习12——数据库的备份和还原
公司的服务器奔溃了,事先没相应的保护措施,使得公司遭到了较大损失,为了以后不再出现类似事件,在系统中引入备份机制,使得数据库被破坏后损失降到最低. 数据的导出和导入 数据转换服务 数据转换服务DTS( ...
- sqlserver多文件组数据库的备份和还原实战
数据库文件过大时就要进行数据分区,就是讲数据库拆分到多个文件组中.已方便数据文件管理,提高数据库的读取效能,多文件组如何进行数据库的备份和还原呢,今天主要做多文件组数据库的备份和还原实验. 第一步 创 ...
- 如何用SQL语句实现Mysql数据库的备份与还原
以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...
- SQL server 2008数据库的备份与还原、分离(转)
SQL server 2008数据库的备份与还原.分离(转) 一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Ser ...
- 【Mongodb】数据库操作--备份、还原、导出和导入
文章转载自点这里 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport. mongo ...
- 关于mysql数据库的备份和还原
在搭建网站的过程中常遇到文件的备份与还原,以备下次再使用 备份: 图中蓝色画线处为备份命令,wordpress为要备份的数据库名,.">"可将结果输出到文件中,/opt/wo ...
随机推荐
- bzoj4833
$数论$ $这个题已经忘了怎么做了,也不想知道了,只记得看了3个小时$ $对于有gcd(f_i, f_j) = f_{gcd(i, j)}性质的数列,以下结论适用$ #include<bits/ ...
- UltraISO中文版+注册码
UltraISO v9.5.3.2901 百度网盘下载地址: http://pan.baidu.com/s/1l9t2U 新浪微盘下载地址: http://vdisk.weibo.com/s/rcvB ...
- 4月超棒的JavaScript游戏开发框架推荐(1) – 51CTO.COM
基于JavaScript开发的游戏是唯一一个能够跨桌面,Web和移动三种平台的.… 查阅全文 ›
- dubbo 使用 filter 报错解决
dubbo可以用filter实现类似tomcat filter过滤器. 实现1.接口请求时间监控. 2.打印输入输出日志(输出日志有应用自己决定) 配置时出现报错. No such extension ...
- Mike and distribution
题意: 给定 $n$ 个物品,每个物品有两个属性$a_i$, $b_i$,求一个长度为$[\frac{n}{2}]+1$的子序列 $p$ 使得 $2 * \sum_{i = 1}^{|p|}{a_{p ...
- roguelike地牢生成算法
文章原地址 上一个地图生成算法,这一次是一个地牢的生成算法,是一个国外的人写的算法,用dart语言写,我把它改成了unity-c#. 原作者博客地址:Rooms and Mazes: A Proced ...
- PYTHON实现DFS算法
class Vertice: def __init__(self,index): self.no = index self.color = 0 # 0:white 1 gray 2 black sel ...
- unity调用Android的jar包
简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...
- bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】
连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0 ...
- [Xcode 实际操作]九、实用进阶-(30)为IAP(支付方式)内购项目添加测试账号,测试内购功能
目录:[Swift]Xcode实际操作 本文将演示如何添加测试账号,以方便对内购功能进行测试. IAP,即in-App Purchase ,是一种智能移动终端应用程序付费的模式, 在苹果(Apple) ...