2016-05-14 5 views
1

Я пытаюсь написать приложение, которое создаст локальную базу данных, если оно не будет найдено в папке приложения. Я запустить этот запрос после удаления файлов MDF Не удается найти файл, указанный при удалении базы данных LocalDb, если был удален .mdf

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