2011-11-20 54 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的文件夹设置,并自动将其复制到您在计算机上设置的任何文件夹以与其同步。

相关问题