![](/img/trans.png)
[英]IOException: The process cannot access the file 'file path' because it is being used by another process in Console Application in C#
[英]c# when copying file(sql localdb)_IOEXCEPTION_ Process cannot access file because the file is being used by another process
我有使用MS-SQL localdb文件(.mdf)的簡單SQL應用程序。 而且我想在每當應用程序關閉時將此localdb文件(.mdf)復制到另一個文件夾作為備份。
但是,下面的簡單代碼將IOException帶入此問題的標題。 如果沒有用戶特定的按鈕單擊,則我的應用程序始終與localdb文件(.mdf)保持斷開連接。
我發現了其他情況,但我的知識不足,即使是相似的知識也不足以理解。
我一直非常感謝您的卓越表現。 非常感謝 !
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (MessageBox.Show("really want to exit?", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
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);
File.Copy(greendbfileName, copied_greendbfileName);
Environment.Exit(0);
}
}
對於正在尋找這種情況的解決方案的人。 我建議使用標准的BACKUP數據庫命令(和RESTORE)。 謝謝 !
當我終止該過程時,表的主鍵ID列奇怪地增加了,例如1、2、3、4、5010、6010、7010。在第一次看來,它工作正常(localdb mdf文件已成功復制,但是,下次我運行我的應用程序時,也許localdb進程的異常終止似乎會影響其功能,我認為強制終止localdb必須非常小心,並且需要與我不同的專家進行研究。
我希望這種小小的經驗對像我這樣尋求解決方案的人有所幫助。
當與localdb的SQL連接打開時,一個進程(sqlservr.exe)開始工作。 文件擴展名不應該使用。
foreach (var process in Process.GetProcessesByName("sqlservr"))
{
process.Kill();
}
我放棄了上述方法,返回到SQL Localdb的標准備份命令。
您應該能夠執行以下操作:1.關閉與數據庫的所有連接2.連接到本地主數據庫3.使用該連接,使數據庫脫機,然后分離它,然后復制文件。 下次連接到它時,它只需重新附加數據庫即可。
您可能想在這里查看我對自己的問題的回答: LocalDB何時解鎖mdf文件?
...這實際上只是對該答案的現代化更新: https : //stackoverflow.com/a/22791484/999256
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.