2016-05-14 54 views
1

我正在嘗試編寫一個應用程序,該應用程序在應用程序的文件夾中找不到應用程序,該應用程序將創建本地數據庫。我刪除的.mdf如果.mdf被刪除,找不到刪除LocalDb數據庫時指定的文件

IF EXISTS (SELECT * FROM sys.databases WHERE name = N'Test_db') 
BEGIN 
    DROP DATABASE Test_db 
END 

CREATE DATABASE Test_db 
ON PRIMARY (NAME=Test_db, FILENAME='...\Test_db.mdf') 

command.ExecuteNonQuery()拋出一個異常,即使它下降的數據庫,並創建一個新的後運行此查詢。該錯誤來自命令的DROP DATABASE部分。

其他信息:無法打開物理文件 「... \ Test_db.mdf」。操作系統錯誤2:「2(系統不能 找到指定的文件。」)。

文件激活失敗。物理文件名 「... \ Test_db_log.ldf」可能不正確。

我發現this的問題,但它沒有解決問題。

我應該使用空捕獲來防止我的應用程序崩潰嗎?

+1

是吧'...'的路徑'mdf'文件的實際代碼,或者這是一個例子?你嘗試寫這個文件的路徑可以從你的應用程序訪問?我只用這個路徑檢查你的代碼:'d:\ Test_db.mdf',它完全正常工作 – gofr1

+0

@ gofr1 ......是一個例子。我使用一種方法來使用'Environment.CurrentDirectory'來構建路徑,並且我只是替換了這些值以便於閱讀。但正如所述,.mdf創建得很好,它只是刪除拋出錯誤的數據庫,因爲我刪除了.mdf。 – Clint

+0

那麼爲什麼你刪除文件,如果DROP應該這樣做? – gofr1

回答

2

的解決方案是sp_detach_db的問題,因爲它從服務器中刪除數據庫,而從文件系統刪除文件

EXEC sp_detach_db 'Test_db' 

代替

DROP DATABASE Test_db 
+0

而且它很好! :) – gofr1

0

如果你擔心文件被刪除,請File.Exists

if (File.Exists(pathname)) 
{ 
    // Execute your SQL 
} 
else 
{ 
    // Error processing 
} 
+0

我做了這個檢查,但如果它不存在,我執行SQL,因此它會創建一個.mdf。換句話說,SQL是錯誤處理,並且如果數據庫文件存在,則不需要做任何事情。 – Clint

相關問題