Замените файл базы данных MDF файлом резервной копии во время выполнения в C # - PullRequest
0 голосов
/ 30 октября 2010

Я написал довольно длинную программу на C #, используя Linq to Sql , и мои данные хранятся в файле MDF , расположенном рядом с EXE моей программы. Часть моей программы имеет форму для резервного копирования файлов базы данных, просто копируя файлы MDF и LDF в указанную пользователем папку.

Однако, если я сделаю запрос в базу данных, а затем попытаюсь заменить исходные файлы резервными копиями, я получу файл , открытый в другом процессе исключение , как и ожидалось ! Проблема в том, что я не знаю, как закрыть файл MDF в экземпляре SqlServer .

Я довольно новичок в Linq to Sql , и я позволил мастерам Visual Studio справиться с большей частью работы! Поэтому заранее извиняюсь, если что-то, что я пытаюсь сделать, звучит глупо! : D

Любая помощь или предложение по улучшению методов программирования для моего случая очень ценится.

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Это может не сработать для ваших нужд, но вы можете рассмотреть возможность переключения приложения на использование Sql Server Compact Edition ("SqlCE") вместо Sql Server (собственно). Похоже, вы используете базу данных в качестве резервного файла для своего приложения, что на самом деле не является целью Sql Server. SqlCE разработан специально для такого рода вещей и прекрасно работает на рабочем столе. Вы можете легко закрыть ваше соединение с SqlCE и манипулировать файлом SDF, как и любым другим файлом (что вы пытаетесь сделать с файлом MDF Sql Server, безуспешно).

Обновление: Это выглядит так, как вам нужно:

USE master 
GO 
ALTER DATABASE YourDatabaseName 
SET OFFLINE WITH ROLLBACK IMMEDIATE 
GO 

(из этот ответ )

0 голосов
/ 30 октября 2010

Перед копированием файлов необходимо остановить сервер SQL или перевести базу данных в автономный режим.

...