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

标签 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;
}

非常感谢!

最佳答案

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

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

您可以使用 t-sql 或更“高级”的 .net 代码 t-sql 可以在这个很棒的 sql 注入(inject)指南中看到 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 将文件传输到某个位置

在您的场景中,哪种听起来可能?

关于c# - 使用 Smo.Backup 将 SQL Server 数据库备份到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199972/

相关文章:

c# - 这个C#代码是什么意思?

.Net 部署项目的检测到的依赖项神奇地未排除

sql-server - 在 SQL Server Management Studio 中使列数据唯一

java - sqljdbc4.jar - 无法连接到 MSSQL 服务器实例 - SSL 错误?

sql - 透视表并将结果与​​列的聚合组合

C#:对象的 == 和 != 运算符的默认实现

c# - 动态按钮表

.net - 如何在 WPF 中的 TextBlock 上应用 CharacterCasing?

c# - 从模型中的 IEnumerable 填充下拉列表,设置选定值

c# - Collection 底层的 ReadOnlyCollection 属性在迭代时被修改