Database Backup和還原,在項目開發中很多客戶都需要的功能。他們希望,點擊備份按鈕時,就可以把備份的資料庫下載到本地儲存。點擊還原按鈕時,把本地的資料庫還原到伺服器上。
雖然這樣很不安全,但是在區域網路內也是很有必要的。
這裡運用到了幾個知識點。
1:Database Backup,和還原(這裡指Sql server)
2:檔案的上傳和下載。(為什麼要用到檔案上傳和下載呢?這裡有個很值得注意的問題,而且我在做項目時也經常會疏忽。我們在測試Database Backup和還原時,都是在本地進行的。也就是說,我們的電腦既做了用戶端,又做了伺服器。所以不管你怎麼測試,只要代碼沒有寫錯就會成功的。一旦你在伺服器上發布之後,再調試時就會出現,Database Backup在了伺服器上,而且資料庫還原也會失敗。所以,這個時候你需要把資料庫下載到本地儲存,還原時把資料上傳到伺服器上,利用sql讀取伺服器上的路徑執行還原作業。)
下面是My Code。我把備份與還原封裝在一個類裡
public class OutData
{
/// <summary>
/// 備份資料庫
///XianNingDSH 是我測試的資料庫名
/// </summary>
public static int backData(string name)
{
string sqlStr = "use XianNingDSH; backup database XianNingDSH to disk='" + name+"'";
return ExecuteSql(sqlStr);
}
/// <summary>
///還原資料庫
/// </summary>
public static int reBackData(string name)
{
string sqlStr = "use master;restore database XianNingDSH from disk='" + name + "'";
return ExecuteSql(sqlStr);
}
}
在前台:
protected void Button1_Click(object sender, EventArgs e)
{
//備份資料庫
//隨機產生備份資料庫名
string filename = HttpUtility.UrlDecode(Request.Cookies["username"].Value) + DateTime.Now.Ticks.ToString() + "Database Backup.bak";
try
{
OutData(Server.MapPath("..") + "//UploadFile//" + filename);
addNote(filename); //把備份的資料完全路徑儲存到XML檔案裡
Jscript.AlertAndRedirect("備份資料成功!", "ImportData.aspx");
}
catch (Exception me)
{
Jscript.Alert(me.Message);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
//還原資料庫
string dric = Server.MapPath("..") + "//UploadFile//" + FileUpload1.FileName;
FileUpload1.SaveAs(dric); //上傳還原資料庫到伺服器上
try
{
OutData(dric);
Jscript.AlertAndRedirect("還原資料庫成功!", "ImportData.aspx");
}
catch
{
Jscript.AlertAndRedirect("還原資料庫失敗!", "ImportData.aspx");
}
}
在處理下載伺服器上的資料庫檔案時,不是以檔案流的形式輸出到本地的方式。而是把儲存的資料庫檔案路徑儲存到xml檔案裡(dataConfig.xml)。
<?xml version="1.0" encoding="utf-8"?>
<dataconfig>
<data>
<time>備份時間</time>
<uname>備份人</uname>
<url>下載</url>
</data>
<data>
<time>2009-11-5 14:43:34</time>
<uname>admin</uname>
<url>admin633930290128125000備份.bak</url>
</data>
<data>
<time>2009-11-5 14:46:59</time>
<uname>admin</uname>
<url>admin633930292183593750備份.bak</url>
</data>
</dataconfig>
所以這裡還需要用到對xml的檔案的處理。我將在下篇部落格裡講述關於對Xml檔案的增刪改查功能。
還要點要注意的時,如果我們是用VSS管理我們的項目時,需要對操作的xml檔案屬性設定為可讀寫。
下面是我的。