2015-12-24 66 views
0

我用代碼C#寫一頁數據從服務器備份.bak文件到客戶端計算機的客戶端計算機。當我在我的電腦上測試的時候非常好。當通過使用connectionString web.cofig通過另一臺計算機連接時,它會再次出現像這樣的錯誤。這一個像之前或解決方法,請幫助。如何備份數據庫從服務器使用asp.net頁面

enter image description here

私人字符串_ConnectionString = ConfigurationManager.ConnectionStrings [ 「的connectionString」]的ToString();

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     FillDatabases(); 
     //ReadBackupFiles(); 
    } 
} 

private void FillDatabases() 
{ 
    try 
    { 
     SqlConnection sqlConnection = new SqlConnection(); 
     sqlConnection.ConnectionString = _ConnectionString; 
     sqlConnection.Open(); 
     string sqlQuery = "SELECT * FROM sys.databases"; 
     SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConnection); 
     sqlCommand.CommandType = CommandType.Text; 
     SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand); 
     DataSet dataSet = new DataSet(); 
     sqlDataAdapter.Fill(dataSet); 
     ddlDatabases.DataSource = dataSet.Tables[0]; 
     ddlDatabases.DataTextField = "name"; 
     ddlDatabases.DataValueField = "database_id"; 
     ddlDatabases.DataBind(); 
    } 
    catch (SqlException sqlException) 
    { 
     lblMessage.Text = sqlException.Message.ToString(); 
    } 
    catch (Exception exception) 
    { 
     lblMessage.Text = exception.Message.ToString(); 
    } 
} 

protected void btnBackup_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string _DatabaseName = ddlDatabases.SelectedItem.Text.ToString(); 
     string _BackupName = _DatabaseName + "_" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year.ToString() + ".bak"; 
     SqlConnection sqlConnection = new SqlConnection(); 
     sqlConnection.ConnectionString = _ConnectionString; 
     sqlConnection.Open(); 
     string sqlQuery = "BACKUP DATABASE " + _DatabaseName + " TO DISK = 'D:\\SQLServerBackups\\" + _BackupName + "' WITH FORMAT, MEDIANAME = 'Z_SQLServerBackups', NAME = '" + _BackupName + "';"; 
     SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConnection); 
     sqlCommand.CommandType = CommandType.Text; 
     int iRows = sqlCommand.ExecuteNonQuery(); 
     sqlConnection.Close(); 
     lblMessage.Text = "The " + _DatabaseName + " database Backup with the name " + _BackupName + " successfully..."; 
     ReadBackupFiles(); 
    } 
    catch (SqlException sqlException) 
    { 
     lblMessage.Text = sqlException.Message.ToString(); 
    } 
    catch (Exception exception) 
    { 
     lblMessage.Text = exception.Message.ToString(); 
    } 
} 
+0

請發表您的代碼和更多的細節 – Clay

+0

錯誤說,這一切,文件路徑是不正確的 –

+0

歡迎計算器:) – www139

回答

0

正在發生的事情是,當您在計算機上運行這個程序一切正常。因爲它是設置爲你的系統。如果你想轉移到你的系統或另一臺獨立於服務器的計算機上,有幾件事情可能會起作用。您可以使共享驅動器脫離您希望程序放入文件的系統,這可能會或可能不起作用,因爲共享文件夾的處理方式與普通文件夾/驅動器不同。在服務器轉儲到服務器有權訪問的預定義​​文件夾後,我會編寫一個連接到文件服務器的上傳程序,並將備份文件自動上傳到那裏。 C#有一些非常好的文件上傳庫,可以爲您自動執行此過程。所以你可以有一個asp.net頁面,它可以像當前系統一樣爲備份文件提供備份文件,另外一個c#程序可以使用調度程序在特定時間運行,並將備份從服務器遠程上傳到所需的位置。

希望這是有道理的,讓我知道你是否有任何問題。

https://msdn.microsoft.com/en-us/library/ms229715(v=vs.110).aspx

下面是代碼從一個文件位置自動爲您有C#上傳文件。您需要在要備份的計算機上安裝一個ftp服務器。否則,唯一的解決辦法是使文件可以從服務器上下載,這意味着只需使文件夾在Internet上可見即可。但我會選擇ftp選項,因爲它是最靈活的。

+0

那麼現在還有其他解決方案嗎?引導我到服務器上備份數據的時候,文件夾中的備份.bak文件就是客戶端。但我不明白如何做得很好。你可以幫我嗎? –

+0

當然!你可以添加那個.bak轉儲到你的問題上面的代碼嗎?我會尋找有助於自動上傳過程的FTP上傳程序。有點像用bash腳本做一個cron作業的方式。但是,如果我能看到問題中的代碼,它將幫助我理解您是如何在系統上進行備份的。我很快就要去上牀了,所以我可能直到早上纔回復你。 – Caperneoignis

+0

但該程序也說驅動器不正確。所以這可能是我的一個誤解。你是否確定系統中的驅動器和文件夾位置激動人心?這聽起來像程序寫在您的系統上,然後移動到服務器,並停止運作。所以我可能會有誤解。所以更多的澄清將幫助我。 – Caperneoignis

0

您在在線模式下創建備份還是隻在您的服務器上創建備份?如果你的服務器中有一些文件,實現下載功能,這就是你所需要的。

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", "attachment; filename="+file); 
Response.TransmitFile(Server.MapPath("~/backups/"+file)); //backup must be located in folder in your application folder, that folder named *backups* 
Response.End(); //file is a filename of your backup: e.g. 20151224.bak 

如果創建在線備份,並想將它發送給用戶,你所要做的下一步措施(這只是一個方法):

1)請備份並保存到你的應用程序文件夾一些臨時文件夾

2)實現下載頁面正如我在前面顯示(用戶儘快下載)

3)以及作爲,你只是刪除您的臨時備份文件的用戶下載。

希望它可以幫助

+0

的位置,謝謝! 但這幾乎就像服務器上已經存在的.bak文件副本上的備份。 所以他們自己不會。我只想在用戶計算機上的服務器上存儲的文件上進行備份。而不是通過操縱存儲在服務器硬盤上,然後複製用戶電腦 反正非常感謝你。因爲你給了我更多的1種方式也不錯 –

+0

@DanyTran不用客氣 – Khazratbek

相關問題