我正在尝试制作一个小应用程序来帮助我进行服务器备份。该应用程序将在我的家用 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 因为你需要要么
- 调用 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/
通过网络映射文件位置(即访问共享/驱动器/ipc 连接)
让服务器通过 ftp 将文件传输到某个位置
在您的场景中,哪种听起来可能?
关于c# - 使用 Smo.Backup 将 SQL Server 数据库备份到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199972/