ZhiYeJianKang_PeiXun/Song.Site/Manage/Sys/DataBaseBackup.aspx.cs

325 lines
11 KiB
C#
Raw Normal View History

2025-02-20 15:41:53 +08:00
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using WeiSha.Common;
using Song.ServiceInterfaces;
using Song.Entities;
//using NBear.Data;
using System.Data.SqlClient;
namespace Song.Site.Manage.Sys
{
public partial class DataBaseBackup : Extend.CustomPage
{
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
private string dataBaseHy = "";
//<2F><><EFBFBD>ݿⱸ<DDBF><E2B1B8>Ŀ¼
private string backDir = "";
//<2F><><EFBFBD>ݿⱸ<DDBF><E2B1B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>׺<EFBFBD><D7BA>
private string backExt = ".bak";
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>access<73><73>sqlserver<65><72>
private string dbType = "access";
//Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>ơ<EFBFBD>
private string dbName = "";
protected void Page_Load(object sender, EventArgs e)
{
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
dbType = WeiSha.Common.Server.DatabaseType;
if (dbType == "access")
{
backDir = "accBackup";
dataBaseHy = WeiSha.Common.Server.DatabaseFilePath;
}
else if (dbType == "sqlServer")
{
backDir = "sqlSBackup";
backExt = ".sasp";
ConnectionStringSettings connsett = ConfigurationManager.ConnectionStrings[ConfigurationManager.ConnectionStrings.Count - 1];
string str = connsett.ConnectionString;
int a = str.IndexOf("Initial Catalog=");
a = a == -1 ? str.IndexOf("DataBase=") + 9 : a + 16;
string strjie = str.Substring(a);
dbName = str.Substring(a, strjie.IndexOf(";"));
}
else
{
Message.Prompt("<22>˹<EFBFBD><CBB9>ܽ<EFBFBD><DCBD><EFBFBD>Access<73><73><EFBFBD><EFBFBD>SQL Server<65>档");
return;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
getDataBase();
if (!IsPostBack)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BindData();
}
//this.Response.Write(dataBaseHy);
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݿ<EFBFBD><DDBF>ĵ<EFBFBD>ַ<EFBFBD><D6B7>
/// </summary>
private void getDataBase()
{
try
{
string backPath = Server.MapPath("~/App_Data/")+backDir;
//<2F><><EFBFBD><EFBFBD>Ŀ¼
DirectoryInfo di = new DirectoryInfo(backPath);
if (!di.Exists)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3>򴴽<EFBFBD>
di.Create();
}
backDir = di.FullName;
}
catch (Exception ex)
{
Message.ExceptionShow(ex);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
private void BindData()
{
try
{
//<2F><><EFBFBD><EFBFBD>Ŀ¼
DirectoryInfo di = new DirectoryInfo(this.backDir);
DataTable dt = new DataTable("DataBase");
DataColumn dc;
//<2F>ļ<EFBFBD><C4BC><EFBFBD>
dc = new DataColumn("file", Type.GetType("System.String"));
dt.Columns.Add(dc);
//·<><C2B7><EFBFBD><EFBFBD>
dc = new DataColumn("path", Type.GetType("System.String"));
dt.Columns.Add(dc);
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
dc = new DataColumn("time", Type.GetType("System.DateTime"));
dt.Columns.Add(dc);
//<2F>ļ<EFBFBD><C4BC><EFBFBD>С
dc = new DataColumn("size", Type.GetType("System.Int32"));
dt.Columns.Add(dc);
//·<><C2B7><EFBFBD><EFBFBD>
dc = new DataColumn("type", Type.GetType("System.String"));
dt.Columns.Add(dc);
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
FileInfo[] fi = di.GetFiles();
foreach (FileInfo file in fi)
{
if (file.Extension != backExt && file.Extension.ToLower() != ".master")
{
continue;
}
DataRow dr = dt.NewRow();
dr["file"] = file.Name.Substring(0, file.Name.LastIndexOf('.'));
dr["path"] = file.FullName;
dr["time"] = file.CreationTime;
dr["size"] = file.Length / 1024;
dr["type"] = file.Extension.ToLower() == ".backup" ? "ϵͳ" : "";
dt.Rows.Add(dr);
}
DataView dv = dt.DefaultView;
dv.Sort = "time desc";
GridView1.DataSource = dv;
GridView1.DataKeyNames = new string[] { "path" };
GridView1.DataBind();
}
catch (Exception ex)
{
Message.ExceptionShow(ex);
}
}
/// <summary>
/// <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void AddEvent(object sender, EventArgs e)
{
string backName = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");
if (dbType == "access")
{
try
{
FileInfo fi = new FileInfo(dataBaseHy);
fi.CopyTo(backDir + "\\" + backName + "" + backExt, true);
BindData();
}
catch (Exception ex)
{
Message.ExceptionShow(ex);
}
}
else if (dbType == "sqlServer")
{
sqlServerBackup(dbName, backDir+"\\"+backName+backExt);
BindData();
}
}
/// <summary>
/// ɾ<><C9BE>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DeleteEvent(object sender, EventArgs e)
{
try
{
string keys = GridView1.GetKeyValues;
foreach (string file in keys.Split(','))
{
FileInfo fi = new FileInfo(file);
if (fi.Exists)
{
if (fi.Extension.ToLower() != ".backup")
fi.Delete();
}
}
BindData();
}
catch (Exception ex)
{
Message.ExceptionShow(ex);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDel_Click(object sender, ImageClickEventArgs e)
{
try
{
WeiSha.WebControl.RowDelete img = (WeiSha.WebControl.RowDelete)sender;
int index = ((GridViewRow)(img.Parent.Parent)).RowIndex;
string file = this.GridView1.DataKeys[index].Value.ToString();
FileInfo fi = new FileInfo(file);
if (fi.Exists)
{
if (fi.Extension.ToLower() != ".backup")
fi.Delete();
}
BindData();
}
catch (Exception ex)
{
Message.ExceptionShow(ex);
}
}
/// <summary>
/// <20><>ԭ<EFBFBD><D4AD><EFBFBD>ݿ⣬<DDBF><E2A3AC>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void RecoverEvent(object sender, EventArgs e)
{
try
{
string keys = GridView1.GetKeyValues;
foreach (string file in keys.Split(','))
{
FileInfo backDbase = new FileInfo(file);
if (dbType == "access")
backDbase.CopyTo(dataBaseHy, true);
else if (dbType == "sqlServer")
sqlServerRestore(dbName, backDbase.FullName);
}
}
catch (Exception ex)
{
Message.ExceptionShow(ex);
}
}
/// <summary>
/// <20><>ԭ<EFBFBD><D4AD><EFBFBD>ݿ⣬<DDBF><E2A3AC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>¼<EFBFBD>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnRecover_Click(object sender, ImageClickEventArgs e)
{
try
{
GridViewRow gr = (GridViewRow)((WeiSha.WebControl.RowRecover)sender).Parent.Parent;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
string backfile = GridView1.DataKeys[gr.RowIndex].Value.ToString();
FileInfo backDbase = new FileInfo(backfile);
if(dbType == "access")
backDbase.CopyTo(dataBaseHy, true);
else if (dbType == "sqlServer")
{
sqlServerRestore(dbName, backDbase.FullName);
}
new Extend.Scripts(this).Alert("<22><>ԭ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>");
}
catch (Exception ex)
{
new Extend.Scripts(this).Alert(ex.Message);
}
}
/// <summary>
/// SQL Server<65><72><EFBFBD>ݿ<EFBFBD><DDBF>ı<EFBFBD><C4B1>ݡ<EFBFBD>
/// </summary>
/// <param name="dbName"><3E><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="fileName">Ҫ<><D2AA><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB>(<28><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>)</param>
public void sqlServerBackup(string dbName, string fileName)
{
//ƴ<><C6B4>SQL<51><4C><EFBFBD>
string sql = "backup database " + dbName + " to disk='" + fileName + "' WITH FORMAT";
//Gateway.Default.fr.FromCustomSql(sql);
zhixingSql(sql);
}
/// <summary>
/// SQL Server<65><72><EFBFBD>ݿ<EFBFBD><DDBF>Ļָ<C4BB><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SQL<51><4C><EFBFBD><EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>С<EFBFBD>
/// </summary>
/// <param name="baseName"><3E><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="fileName">Ҫ<><D2AA>ԭ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>λ<EFBFBD><CEBB>(<28><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>չ<EFBFBD><D5B9>)</param>
public void sqlServerRestore(string baseName, string fileName)
{
string sql = "use master " +
"declare @sql varchar(100) while 1=1 begin select top 1 @sql='kill '+cast(spid as varchar(3)) from master..sysprocesses where spid>50 and spid<>@@spid and dbid=db_id('" + baseName + "') " +
"if @@rowcount=0 break exec(@sql) end RESTORE DATABASE " + baseName + " FROM disk = '" + fileName + "' WITH REPLACE";
zhixingSql(sql);
}
/// <summary>
/// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>SQL<51><4C><EFBFBD>
/// </summary>
/// <param name="sql">Ҫִ<D2AA>е<EFBFBD>SQL<51><4C><EFBFBD><EFBFBD></param>
public void zhixingSql(string sql)
{
try
{
//ִ<><D6B4>SQL<51><4C><EFBFBD>
ConnectionStringSettings connsett = ConfigurationManager.ConnectionStrings[ConfigurationManager.ConnectionStrings.Count - 1];
string ConnectString = connsett.ConnectionString;
SqlConnection connection = new SqlConnection(ConnectString);
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
catch (Exception ex)
{
new Extend.Scripts(this).Alert(ex.Message);
}
}
}
}