国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET 恢復(fù)備份Sqlserver實(shí)現(xiàn)代碼

2024-07-10 13:25:52
字體:
供稿:網(wǎng)友
最近做的一個(gè)項(xiàng)目因?yàn)?u>服務(wù)器是在特殊機(jī)房上的,因?yàn)榘踩矫娴目紤],不能給我們開發(fā)者提供FTP服務(wù),所以每次更新版本都得自己跑一趟,而他的機(jī)房有很遠(yuǎn),所以我一直想能不能開發(fā)一個(gè)維護(hù)版本的系統(tǒng)呢,對數(shù)據(jù)庫和代碼進(jìn)行在線更新,就不用自己跑了,于是就有了下面的嘗試,在線恢復(fù)和備份SQL Server:

前臺代碼:

復(fù)制代碼 代碼如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SqlDbMgmt.aspx.cs" Inherits="SysSourceMgmt.SqlDbMgmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form runat="server">
<div>
<table>
<tr>
<td>
<span>操 作 數(shù) 據(jù) 庫</span>
</td>
<td>
<asp:DropDownList runat="server" Font-Size="9pt">
</asp:DropDownList>
<asp:TextBox runat="server"></asp:TextBox>
</td>
<td>
</td>
</tr>
<tr>
<td>
<span>備份名稱和位置</span>
</td>
<td>
<asp:TextBox runat="server" Font-Size="9pt"></asp:TextBox>
</td>
<td>
<span>(如D:/beifen)</span>
</td>
</tr>
<tr>
<td colspan="3">
<asp:Button runat="server" Font-Size="9pt" Text="備份數(shù)據(jù)庫" />
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td>
<span>操 作 數(shù) 據(jù) 庫</span>
</td>
<td>
<asp:DropDownList runat="server" Font-Size="9pt">
</asp:DropDownList>
</td>
<td>
</td>
</tr>
<tr>
<td>
<span>操 作 數(shù) 據(jù) 庫</span>
</td>
<td>
<asp:FileUpload runat="server" Font-Size="9pt" />
</td>
<td>
</td>
</tr>
<tr>
<td colspan="3">
<asp:Button runat="server" Font-Size="9pt" Text="還原數(shù)據(jù)庫" />
<asp:Button runat="server" Font-Size="9pt" Text="強(qiáng)制還原數(shù)據(jù)庫" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>


后臺:

復(fù)制代碼 代碼如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.IO;
using System.Data;
using System.Diagnostics;
namespace SysSourceMgmt
{
public partial class SqlDbMgmt : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
string SqlStr1 = "Server=(local);DataBase=master;Uid=sa;Pwd=";
string SqlStr2 = "Exec sp_helpdb";
SqlConnection con = new SqlConnection(SqlStr1);
con.Open();
SqlCommand com = new SqlCommand(SqlStr2, con);
SqlDataReader dr = com.ExecuteReader();
this.DropDownList1.DataSource = dr;
this.DropDownList1.DataTextField = "name";
this.DropDownList1.DataBind();
dr.Close();
con.Close();
SqlStr1 = "Server=(local);DataBase=master;Uid=sa;Pwd=";
SqlStr2 = "Exec sp_helpdb";
con = new SqlConnection(SqlStr1);
con.Open();
com = new SqlCommand(SqlStr2, con);
dr = com.ExecuteReader();
this.DropDownList1.DataSource = dr;
this.DropDownList1.DataTextField = "name";
this.DropDownList1.DataBind();
dr.Close();
con.Close();
}
catch (Exception)
{
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string dbName = string.Empty;
if (DropDownList1.Items.Count != 0)
{
dbName = DropDownList1.SelectedValue.Trim();
}
else
{
dbName = txtDbName.Text.Trim();
}
string SqlStr1 = "Data Source=.//sqlexpress;Initial Catalog='" + dbName + "';Integrated Security=True";
string SqlStr2 = "backup database " + dbName + " to disk='" + this.TextBox1.Text.Trim() + ".bak'";
SqlConnection con = new SqlConnection(SqlStr1);
con.Open();
try
{
if (File.Exists(this.TextBox1.Text.Trim()))
{
Response.Write("<script language=javascript>alert('此文件已存在,請從新輸入!');location='Default.aspx'</script>");
return;
}
SqlCommand com = new SqlCommand(SqlStr2, con);
com.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('備份數(shù)據(jù)成功!');'</script>");
}
catch (Exception error)
{
Response.Write(error.Message);
Response.Write("<script language=javascript>alert('備份數(shù)據(jù)失敗!')</script>");
}
finally
{
con.Close();
}
}
protected void Button2_Click(object sender, EventArgs e)
{
string path = this.FileUpload1.PostedFile.FileName; //獲得備份路徑及數(shù)據(jù)庫名稱
string dbName = string.Empty;
if (DropDownList1.Items.Count != 0)
{
dbName = DropDownList1.SelectedValue.Trim();
}
else
{
dbName = txtDbName.Text.Trim();
}
string SqlStr1 = "Data Source=.//sqlexpress;Initial Catalog='" + dbName + "';Integrated Security=True";
string SqlStr2 = @"use master restore database " + dbName + " from disk='" + path + "'";
SqlConnection con = new SqlConnection(SqlStr1);
con.Open();
try
{
SqlCommand com = new SqlCommand(SqlStr2, con);
com.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('還原數(shù)據(jù)成功!');'</script>");
}
catch (Exception error)
{
Response.Write(error.Message);
Response.Write("<script language=javascript>alert('還原數(shù)據(jù)失敗!')</script>");
txtDbName.Text = SqlStr2;
}
finally
{
con.Close();
}
}
/// <summary>
/// 恢復(fù)數(shù)據(jù)庫,可選擇是否可以強(qiáng)制還原(即在其他人在用的時(shí)候,依然可以還原)
/// </summary>
/// <param>待還原的數(shù)據(jù)庫名稱</param>
/// <param>帶還原的備份文件的完全路徑</param>
/// <param>恢復(fù)數(shù)據(jù)庫失敗的信息</param>
/// <param>是否強(qiáng)制還原(恢復(fù)),如果為TRUE,則exec killspid '數(shù)據(jù)庫名' 結(jié)束此數(shù)據(jù)庫的進(jìn)程,這樣才能還原數(shù)據(jù)庫</param>
/// <returns></returns>
public bool RestoreDataBase(string databasename, string databasefile, ref string returnMessage, bool forceRestore, SqlConnection conn)
{
bool success = true;
string path = databasefile;
string dbname = databasename;
string restoreSql = "use master;";
if (forceRestore)//如果強(qiáng)制回復(fù)
restoreSql += string.Format("use master exec killspid '{0}';", databasename);
restoreSql += "restore database @dbname from disk = @path;";
SqlCommand myCommand = new SqlCommand(restoreSql, conn);
myCommand.Parameters.Add("@dbname", SqlDbType.Char);
myCommand.Parameters["@dbname"].Value = dbname;
myCommand.Parameters.Add("@path", SqlDbType.Char);
myCommand.Parameters["@path"].Value = path;
Response.Write(restoreSql);
try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
returnMessage = "還原成功";
}
catch (Exception ex)
{
returnMessage = ex.Message;
success = false;
}
finally
{
myCommand.Connection.Close();
}
return success;
}
protected void Button3_Click(object sender, EventArgs e)
{
string path = this.FileUpload1.PostedFile.FileName; //獲得備份路徑及數(shù)據(jù)庫名稱
string dbName = string.Empty;
if (DropDownList1.Items.Count != 0)
{
dbName = DropDownList1.SelectedValue.Trim();
}
else
{
dbName = txtDbName.Text.Trim();
}
string returnMessage = string.Empty;
string SqlStr1 = "Data Source=.//sqlexpress;Initial Catalog='" + dbName + "';Integrated Security=True";
SqlConnection con = new SqlConnection(SqlStr1);
RestoreDataBase(txtDbName.Text, path, ref returnMessage, true,con);
Response.Write(returnMessage);
}
}
}


效果圖:

ASP.NET 恢復(fù)備份Sqlserver實(shí)現(xiàn)代碼

 

經(jīng)過試驗(yàn),大體完成了我需要的功能,具體優(yōu)化后期進(jìn)行中。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文山县| 监利县| 九江县| 平利县| 武宣县| 永吉县| 庆安县| 镇雄县| 和林格尔县| 宁陕县| 石台县| 泾阳县| 三明市| 兴国县| 安康市| 商洛市| 长兴县| 龙口市| 祁阳县| 绥棱县| 西贡区| 于田县| 梧州市| 武宣县| 偃师市| 黑河市| 牙克石市| 罗定市| 永修县| 招远市| 莱州市| 桐城市| 新宁县| 北川| 台中市| 信丰县| 日喀则市| 清远市| 清丰县| 炎陵县| 华容县|