使用Smo.Backup将SQL Server数据库备份到字符串

我正在尝试制作一个可以帮助我进行服务器备份的小应用程序。 该应用程序将在我的家用PC上运行,因此主要目标是能够连接到外部服务器,备份所选数据库,将备份内容转储到字符串或其他东西,以便我可以将其写在我的PC磁盘而不是服务器上磁盘。

我做了那个可以写在服务器磁盘上的东西,但是我希望能够在我的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; } 

非常感谢!

这会变得有点hacky因为你需要

  1. 调用sql函数来读取服务器上的文件并作为二进制数组返回给您,然后转换回文件。 这将需要适当的权限作为您运行的帐户访问服务器驱动器上的文件。

你可以使用t-sql或者更高级的’高级’.net代码t-sql可以在这个伟大的sql注入指南中看到http://www.blackhat.com/presentations/bh-europe-09/Guimaraes/Blackhat-欧洲-09-Damele-SQL注入攻击,slides.pdf

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

  1. 通过网络映射文件位置(即访问共享/驱动器/ ipc连接)

  2. 让服务器将文件ftp到一个位置

在你的场景中听起来有哪些?

我认为你没有联网到服务器? 理想情况下,您可以使用网络地址直接将其备份到您的计算机,但我猜你会想到这一点。

走你正在考虑的路线将要求你拥有通常不希望通过互联网向某人开放的权限,并且编程要比设置第二个移动过程麻烦得多您可以访问的文件。

亚当斯建议让服务器ftp文件是一个很好的。 或者,您可能会发现使用DropBox( http://www.dropbox.com )可能是阻力最小的路径。 然后,您可以将数据库备份到带有Dropbox的文件夹设置,它将自动复制到您在计算机上设置的任何文件夹以与其同步。

您应该研究DAC,它主要用于Azure中的SQL Server,但也适用于SQL Server 2008 R2。

http://sqldacexamples.codeplex.com/