簡體   English   中英

復制文件時使用C#(sql localdb)_IOEXCEPTION_進程無法訪問文件,因為該文件正在被另一個進程使用

[英]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)。 謝謝 !

僅供參考
如何以編程方式備份​​SQL Server 2014 Express Localdb(.mdf)文件

當我終止該過程時,表的主鍵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.

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