簡體   English   中英

C#:將SQL Server數據庫備份到新的.bak文件

[英]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.沒有寫該文件夾的權限。

文件是否存在以及是否指定了.InitializeWITH INIT等效),將決定該情況下命令的行為。

如果該文件夾不存在,則會出現錯誤,並且需要首先創建該文件夾(實際上是整個路徑)。

如果該文件夾確實存在,則需要確保SQL Server服務帳戶具有寫入該文件夾的權限。 您試圖寫入根目錄( C:\\ )-驅動器根目錄是現代Windows版本中受保護的特殊聖地。 嘗試創建一個類似於C:\\backups\\的文件夾,然后備份到該位置。

這就是為什么我們通常允許SQL Server寫入實例的指定備份文件夾或其他一些預定位置的原因-如果需要在其他位置從那里移動/復制文件。 通常,我們不需要管理用戶可能輸入的任何文件夾的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM