2011-11-20 93 views
2

我試圖製作一個小應用程序,它可以幫助我製作服務器備份。該應用程序將在我的家用電腦上運行,因此主要目標是能夠連接到外部服務器,備份所選數據庫,將備份內容轉儲爲字符串或其他內容,以便我可以將其寫入PC磁盤而不是服務器的磁盤。使用Smo.Backup將SQL Server數據庫備份到字符串

我做了可以在服務器磁盤上寫入的內容,但我希望能夠在我的PC磁盤上寫入備份的結果。

private bool BackupDatabase() 
{ 
    try 
    { 
     // Filename 
     string sFileName = string.Format("{0}\\{1}.bak", _sWhereToBackup, DatabaseName); 

     // Connection 
     string sConnectionString = String.Format(
      "Data Source=tcp:{0};Initial Catalog={1};User ID={2};Pwd={3};", 
      DatabaseHost, DatabaseName, DatabaseUsername, DatabasePassword); 

     SqlConnection oSqlConnection = new SqlConnection(sConnectionString); 
     Server oServer = new Server(new ServerConnection(oSqlConnection)); 

     // Backup 
     Backup backup = new Backup(); 
     backup.Action = BackupActionType.Database; 
     backup.Database = DatabaseName; 
     backup.Incremental = false; 
     backup.Initialize = true; 
     backup.LogTruncation = BackupTruncateLogType.Truncate; 

     // Backup Device 
     BackupDeviceItem backupItemDevice = new BackupDeviceItem(sFileName, DeviceType.File); 
     backup.Devices.Add(backupItemDevice); 

     // Start Backup 
     backup.SqlBackup(oServer); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

    return false; 
} 

非常感謝!

+0

如何從家中連接到該數據庫。 VPN?如果是的話,簡單的C#代碼複製文件從服務器到您的電腦 –

回答

1

這將會變得有點哈克,因爲你需要或者

  1. 調用SQL函數來讀取服務器上的文件,並返回一個二進制數組給你,然後再轉換回文件。這將需要適當的權限作爲您正在運行的帳戶訪問服務器驅動器上的文件。

你可以使用T-SQL或略偏 '高級' .NET代碼 T-SQL可以這個偉大的SQL注入指南中可以看出 http://www.blackhat.com/presentations/bh-europe-09/Guimaraes/Blackhat-europe-09-Damele-SQLInjection-slides.pdf

或.net: http://www.mssqltips.com/sqlservertip/2349/read-and-write-binary-files-with-the-sql-server-clr/

  1. 映射文件位置(即訪問共享/驅動/ IPC連接的)通過網絡

  2. 具有S將文件ftp ftp到某個位置

這聽起來可能在您的方案中?

+0

Upvote涵蓋了一系列可能性,但我認爲第一個選項可能不是任何人被授權備份到他們的家用機器將永遠需要打擾與。我認爲這種選擇通常會被保留給試圖做某些他們不應該做的事的人。 –

+0

@BrandonMoore謝謝。在OP提到將備份內容作爲字符串返回時,我不同意這一點。正因爲如此,我必須假設缺少簡單的文件共享,往往意味着他想要類似的東西(無論出於何種原因)。就個人而言,我當然會複製我的家庭網絡上的文件,使用IPSEC等,但誰知道這裏的原因:) –

+0

哦,我同意這是問題的最正確答案,所以我不認爲有任何問題意見不一致:) –

0

我認爲你沒有聯網到服務器?理想情況下,您可以使用網絡地址直接將其備份到您的機器,但我猜你已經想到了這一點。

走你正在考慮的路線將要求你有權限,你通常不希望通過互聯網向某人開放,並且比編程一個簡單的程序更麻煩第二個過程將文件移動到您可以訪問的地方。

亞當斯建議讓服務器FTP文件是一個很好的建議。或者,您可能會發現使用DropBox(www.dropbox.com)可能是阻力最小的路徑。然後您可以將數據庫備份到帶有Dropbox的文件夾設置,並自動將其複製到您在計算機上設置的任何文件夾以與其同步。

相關問題