<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<head runat="server">
<title>Login11</title>
<script src="../../ext/ext-all.js" type="text/javascript">
</script>
<link href="../../ext/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<script src="../../ext/locale/ext-lang-zh_CN.js" type="text/javascript">
</script>
<script type="text/javascript">
Ext.onReady(function () {
Ext.tip.QuickTipManager.init();
var myMask = new Ext.LoadMask(Ext.getBody(), {
id: 'mask',
msg: "配置操作中,请稍等..."
});
var mystore = Ext.create('Ext.data.Store', {
fields: ['Name', 'CreationTime', 'Length', 'FullName'],
autoLoad: true,
pageSize: 10,
proxy: {
type: 'ajax',
url: '/AdLogin/filedata',
reader: {
type: 'json',
root: 'd'
}
}
});
Ext.delfile = function (file) {
myMask.show();
Ext.Ajax.request({
url: '/AdLogin/deleFile?file=' + file,
async: true,
success: function (response, opts) {
myMask.hide();
var obj = Ext.decode(response.responseText);
Ext.Msg.alert("提醒", "删除成功");
mystore.load();
},
failure: function (response, opts) {
}
});
}
Ext.restore = function (file) {
myMask.show();
Ext.Ajax.request({
url: '/AdLogin/reStore?file=' + file,
async: true,
success: function (response, opts) {
myMask.hide();
var obj = Ext.decode(response.responseText);
Ext.Msg.alert("提醒", "还原成功");
},
failure: function (response, opts) {
}
});
}
function bfstore() {
myMask.show();
Ext.Ajax.request({
url: '/AdLogin/bfStore',
async: true,
success: function (response, opts) {
myMask.hide();
Ext.Msg.alert("提醒", "备份成功");
mystore.load();
},
failure: function (response, opts) {
}
});
}
var bfButton = Ext.create("Ext.Button", {
text: '备份数据库',
handler: function () {
bfstore();
}
});
var mygrid = Ext.create('Ext.grid.Panel', {
title: '数据库管理',
layout: 'fit',
dockedItems: [{
xtype: 'toolbar',
dock: 'top',
items: [bfButton]
}],
store: mystore,
bbar: Ext.create('Ext.toolbar.Paging', {
store: mystore,
dock: 'bottom',
displayInfo: true
}),
columns: [{
header: '操作',
width: 180,
dataIndex: 'Name',
renderer: function (value) {
return ' <a href="#" onclick="Ext.delfile(\'' + value + '\')">删除备份</a> <a href="#" onclick="Ext.restore(\'' + value + '\')">还原数据库</a>';
}
}, {
header: '文件名称',
dataIndex: 'Name',
width: 200
},
{
header: '创建日期',
dataIndex: 'CreationTime',
width: 200,
renderer: function (value) {
var dt = new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
return Ext.Date.format(dt, 'Y-m-d h:m:s');
}
},
{
header: '备份大小',
width: 200,
dataIndex: 'Length',
renderer: function (value) {
return (value / 1024/1024).toFixed(2)+"MB";
}
},
{
header: '文件路径',
width: 400,
dataIndex: 'FullName'
}]
});
Ext.create('Ext.container.Viewport',
{
layout: 'fit',
items: [mygrid]
});
});
</script>
</head>
<body>
<div>
</div>
</body>
</html>
public ActionResult filedata()
{
string path = Server.MapPath("/backdata/");
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] list = di.GetFiles();
List<FileInfo> list1 = new List<FileInfo>();
for (int i = 0; i < list.Length; i++)
{
list1.Add(list[i]);
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
int start = Convert.ToInt32(Request.QueryString["start"]);
int limit = Convert.ToInt32(Request.QueryString["limit"]);
int allcount = list1.Count();
list1 = list1.Select(d => d).OrderByDescending(d => d.CreationTime).Skip(start).Take(limit).ToList();
return Content("{\"total\": " + allcount + ", d: " + serializer.Serialize(list1.Select(t => new {t.CreationTime,t.Name,t.FullName,t.Length })) + " }");
}
public ActionResult deleFile()
{
string file = Request.QueryString["file"];
string path = Server.MapPath("/backdata/") + file;
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
return Content("{success:true}");
}
string database = "haoyhb";
public ActionResult reStore()
{
string file = Request.QueryString["file"];
string path = Server.MapPath("/backdata/") + file;
System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
DbHelperSQL.RestoreDatabase(fileInfo.FullName, database);
return Content("{success:true}");
}
public ActionResult bfStore() {
DbHelperSQL.BackUpDataBase(Server.MapPath("/backdata/") + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bak", database);
return Content("{success:true}");
}
public static bool BackUpDataBase(string databasefile, string database)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
if (File.Exists(databasefile))
{
File.Delete(databasefile);
}
//还原的数据库MyDataBase
string sql = "BACKUP DATABASE " + database + " TO DISK = '" + databasefile + "' ";
conn.Open();
SqlCommand comm = new SqlCommand(sql, conn);
comm.CommandType = CommandType.Text;
try
{
comm.ExecuteNonQuery();
}
catch (Exception err)
{
string str = err.Message;
conn.Close();
return false;
}
conn.Close();//关闭数据库连接
return true;
}
}
//以下是还原数据库,稍微麻烦些,要关闭所有与当前数据库相连的连接------------------------------------
//--------------------------------------------------------------------------------------------------------------------------
public static string RestoreDatabase(string backfile, string database)
{
///杀死原来所有的数据库连接进程
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.;Initial Catalog=master;User ID=sa;pwd =sa";
conn.Open();
string sql = "SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='" + database + "'";
SqlCommand cmd1 = new SqlCommand(sql, conn);
SqlDataReader dr;
ArrayList list = new ArrayList();
try
{
dr = cmd1.ExecuteReader();
while (dr.Read())
{
list.Add(dr.GetInt16(0));
}
dr.Close();
}
catch (SqlException eee)
{
//MessageBox.Show(eee.ToString());
return "还原失败";
}
finally
{
conn.Close();
}
//MessageBox.Show(list.Count.ToString());
for (int i = 0; i < list.Count; i++)
{
conn.Open();
cmd1 = new SqlCommand(string.Format("KILL {0}", list[i].ToString()), conn);
cmd1.ExecuteNonQuery();
conn.Close();
// MessageBox.Show("系统已经清除的数据库线程: " + list[i].ToString() + "\r\n正在还原数据库!");
}
//这里一定要是master数据库,而不能是要还原的数据库,因为这样便变成了有其它进程
//占用了数据库。
string constr = @"Data Source=.;Initial Catalog=master;User ID=sa;pwd =sa";
string path = backfile;
string BACKUP = String.Format("RESTORE DATABASE {0} FROM DISK = '{1}' WITH REPLACE", database, path);
SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand(BACKUP, con);
con.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ee)
{
//throw(ee);
return "还原失败";
//MessageBox.Show("还原失败");
}
finally
{
con.Close();
}
return "还原成功";
}



- [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)
/// <summary>/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库/// 1.首先在在项目中引用SQLDMO.DLL文件./// 2.在引用中的SQLDMO.D ...
- 查询清除SQL Server数据库备份还原历史记录
曾经遇到过一个用户MSDB数据库非常大,让我帮忙查查是什么原因.使用sp_spaceused找出了所有表的数据大小,发现问题是SQL Server备份和还原历史表数据太大.用户经常会做日志备份,但是从 ...
- C#中数据库备份还原 精简
C#中数据库备份还原 使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) /// /// DbOper类,主要应用SQLD ...
- MySQL数据库备份还原(基于binlog的增量备份)
MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份 增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...
- MSSQL2008数据库备份还原和数据恢复
原文:MSSQL2008数据库备份还原和数据恢复 序言 一直想写一篇关于数据库备份与恢复的文章,但基于能力的有限对数据库认知的有限怕不足以准确的表达,最后思考很久还是决定把自己的一些理解写出来供大 ...
- SQL server数据库备份还原问题备忘(亲测有效)
问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...
- 第二百九十节,MySQL数据库-MySQL命令行导出导入数据库,数据库备份还原
MySQL命令行导出导入数据库,数据库备份还原 MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program ...
- Oracle数据库备份还原笔记
Oracle数据库备份还原笔记 通过查阅资料知道Oracle备份还原的方式有三种.分别的是导出/导入.热备份和冷备份.导出/导入是一种逻辑备份.而热备份和冷备份是物理备份.[参考资料(https:// ...
- SQL Server数据库备份&还原
一.备份 1.登录数据库 2.找到要还原的数据库 右键-任务-备份-添加(路径只写一个,刚开始二个总是报错)-确定 二.还原数据库 这个之间报错了二次 1.报错1:备份集中的数据库与现有数据库“XXX ...
随机推荐
- windows开发错误
2018/07/16: 1.问题: 代码: list <int> listN; error C2065:'list' : undeclared identifier 我已经#include ...
- vim common usage
vim normal模式下 1.c+i+分隔符,删除分隔符里面的内容(不删除分隔符,c+a+分隔符则包括分隔符一起删掉) 如将光标位于'%s : %d years old ' 中,此时按c+i+' ...
- org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException 前言中不允许有内容 来自类路径资源的XML文档中的第1行是无效的
今天复习一下Spring和Hibernate的整合,遇到了一个问题,报错信息如下: org.springframework.beans.factory.xml.XmlBeanDefinitionSto ...
- 使用requests+BeaBeautiful Soup爬取妹子图图片
1. Requests:让 HTTP 服务人类 Requests 继承了urllib2的所有特性.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定 ...
- 树形查询SQL优化一例
上周五一哥们发了条SQL,让我看看,代码如下: SELECT COUNT(1) FROM (select m.sheet_id from cpm_main_sheet_history m, cpm_s ...
- Java 文件操作大集合
package com.sess.hny.sys.fileserver; import java.io.BufferedInputStream;import java.io.BufferedOutpu ...
- LeetCode(46)Permutations
题目 Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the fo ...
- 牛客网NOIP赛前集训营 第6场 T1 最长路
[题解] 先建反向图,然后跑拓扑排序求出最长路. 将所有的点按照最长路从小到大分层,把上一层连向这一层的边按照边权为第一关键字.起点的排名为第二关键字排序. 按照这个顺序更新这一层的答案,按照这一层每 ...
- js用for...in 这种遍历的方式
var arr = new Array("first", "second", "third") for(var item in arr) { ...
- hihoCoder#1120 小Hi小Ho的惊天大作战:扫雷·三
原题地址 看上去非常复杂, 实际上是这一系列最简单的一步,本质上是个搜索过程,相比于前一道题,可以不用策略三,而且题目的数据规模超级小,所以暴力搜索就能过. 把尚未确定的点放在一个unsettled列 ...