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

时间:2011-11-20 06:54:01

标签: c# .net sql-server smo

我正在尝试创建一个可以帮助我进行服务器备份的应用程序。该应用程序将在我的家用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;
}

非常感谢!

3 个答案:

答案 0 :(得分:1)

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

  1. 调用sql函数读取服务器上的文件并作为二进制数组返回给您,然后转换回文件。这将需要适当的权限作为您运行的帐户来访问服务器驱动器上的文件。
  2. 你可以使用t-sql或更高级的'.net代码 在这个伟大的SQL注入指南中可以看到t-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. 让服务器将文件ftp到某个位置

    3. 您的情况可能会发生哪些声音?

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

http://sqldacexamples.codeplex.com/