我有使用SQL Server 2014 LocalDB的簡單Windows應用程序(.mdf
文件)。如何以編程方式備份SQL Server 2014 Express Localdb(.mdf)文件
我希望當用戶單擊退出按鈕時,我的應用程序會自動將其localdb文件(.mdf
)備份到同一臺計算機上的另一個文件夾中。
我寫了下面簡單的代碼,但發生的SQLException語法錯誤:
語法錯誤near`'C:\ greendb_angelheart.mdf」
(DATABASE ""{0}""
語法似乎罰款)
我擔心通過使用正常的SqlConnection
代碼連接到特定的localdb
文件是否正確。
我簡單的代碼是:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (MessageBox.Show("Really want to exit? Thank you !", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
string backuppath_basic = @"c:\Green_Backup";
if (!System.IO.Directory.Exists("backuppath_basic"))
{
System.IO.Directory.CreateDirectory(backuppath_basic);
}
var greendbfileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), string.Format("greendb_{0}.mdf", personID));
var copied_greendbfileName = string.Format(@"C:\greendb_{0}.mdf", personID);
string localConnectionString = string.Format(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename= " + Environment.GetEnvironmentVariable("APPDATA") + @"\greendb_{0}.mdf;Integrated Security=True;Connect Timeout=30;", personID);
SqlConnection backupConn = new SqlConnection();
backupConn.ConnectionString = localConnectionString;
backupConn.Open();
SqlCommand backupcomm = backupConn.CreateCommand();
string backupdb = @"BACKUP DATABASE ""{0}"" TO DISK '{1}'";
backupdb = string.Format(backupdb, greendbfileName, copied_greendbfileName);
SqlCommand backupcreatecomm = new SqlCommand(backupdb, backupConn);
backupcreatecomm.ExecuteNonQuery();
backupConn.Close();
Environment.Exit(0);
}
}
我認爲你不能複製MDF,NDF或LDF文件,而SQL Server服務之前關閉現有的連接運行。你是否嘗試將數據庫脫機並複製?或分離 - 複製 - 附加?或者你爲什麼不採取簡單的完整備份? –
@YusifYusifov,感謝您的評論,當我嘗試在應用程序運行時簡單複製時,由於另一個進程正在使用該文件,導致進程無法訪問數據庫文件,導致IOException。這就是爲什麼我問這個問題..SQL語法錯誤似乎通常很容易,但我沒有得到正確的語法,即使我嘗試了像單引號,雙引號,沒有引用等許多情況...任何好主意,將不勝感激! –