[英]C#: Backup SQL Server Database to a NEW .bak file
我正在嘗試制作一個Windows Forms應用程序,該應用程序能夠從SQL Server備份和還原數據庫。 用戶可以選擇保存.bak文件的位置。
我遇到的問題是,如果該文件不存在,則不會創建一個新文件。 因此,如果我從SQL Server中進行備份並將其保存到C:\\ backup.bak並將其作為“路徑”傳遞到程序中,則它將起作用,但是如果我將文件的位置或名稱更改為不存在,它將引發錯誤,表明它無法打開備份設備。 如果它不存在,是否有可能創建一個新的.bak文件,我將如何去做?
我的代碼當前如下:
var dataSource = txtDS.Text;
var db = txtDbName.Text;
var path = txtBackup.Text;
var name = txtName.Text;
var desc = txtDesc.Text;
if(File.Exists( path) == true )
{
MessageBox.Show("Test");
}
else
{
Directory.CreateDirectory(@path);
}
Server myServer = new Server(dataSource);
myServer.ConnectionContext.LoginSecure = true;
myServer.ConnectionContext.Connect();
var bkpDbLog = new Backup();
bkpDbLog.Action = BackupActionType.Database;
bkpDbLog.Database = db;
bkpDbLog.Devices.AddDevice(path, DeviceType.File);
bkpDbLog.BackupSetName = name;
bkpDbLog.BackupSetDescription = desc;
bkpDbLog.Initialize = true;
bkpDbLog.Checksum = true;
bkpDbLog.ContinueAfterError = true;
bkpDbLog.Incremental = false;
bkpDbLog.FormatMedia = false;
bkpDbLog.PercentComplete += CompletionStatusInPercent;
bkpDbLog.Complete += BackupCompleted;
bkpDbLog.SqlBackup(myServer);
if (myServer.ConnectionContext.IsOpen)
myServer.ConnectionContext.Disconnect();
謝謝!
我不熟悉您在此處使用的Backup
對象(我總是發出實際的BACKUP DATABASE
命令),但我懷疑如果文件不存在vs.如果文件夾不存在vs.沒有寫該文件夾的權限。
文件是否存在以及是否指定了.Initialize
( WITH INIT
等效),將決定該情況下命令的行為。
如果該文件夾不存在,則會出現錯誤,並且需要首先創建該文件夾(實際上是整個路徑)。
如果該文件夾確實存在,則需要確保SQL Server服務帳戶具有寫入該文件夾的權限。 您試圖寫入根目錄( C:\\
)-驅動器根目錄是現代Windows版本中受保護的特殊聖地。 嘗試創建一個類似於C:\\backups\\
的文件夾,然后備份到該位置。
這就是為什么我們通常允許SQL Server寫入實例的指定備份文件夾或其他一些預定位置的原因-如果需要在其他位置從那里移動/復制文件。 通常,我們不需要管理用戶可能輸入的任何文件夾的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.