2016-05-14 10 views
1

ローカルデータベースを作成するアプリケーションを作成しようとしています。私はそれがデータベースを削除し、新しいものを作成していても、.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()が例外をスロー.mdfファイルを削除した後、このクエリを実行します。エラーは、コマンドの一部であるDROP DATABASEから発生します。

追加情報:物理ファイル "... \ Test_db.mdf"を開くことができません。オペレーティングシステムエラー2: "2(指定されたファイルが見つかりませんでした。 )"

ファイルのアクティブ化に失敗しました。物理ファイル名 "... \ Test_db_log.ldf"が正しくない可能性があります。

私はthis質問を見つけましたが、問題の解決策はありません。

アプリケーションがクラッシュしないように空のキャッチを使用する必要がありますか?あなたが削除されたファイルを心配している場合は、ファイルシステムからファイルを削除せずに、サーバーからデータベースを削除するため

+1

それは ''は...へのパスで'mdf'ファイルの実際のコード、またはこれは一例ですか?このファイルを書き込もうとするパスはアプリからアクセスできますか?私はあなたのコードを 'd:\ Test_db.mdf'というパスでチェックしています。それは完全に動作しています – gofr1

+0

@ gofr1 The ... \は例です。私は '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

関連する問題