Проблема в восстановлении базы данных в C # - PullRequest
2 голосов
/ 06 августа 2011

Я уже все определяю, и этот код является частью моего кода

if (Sql_Conn == null)
    Sql_Conn = new SqlConnection(Str_Con);
// str_con is my connection string

if (Sql_Conn.State != ConnectionState.Open)
   Sql_Conn.Open();

Data_Table = new DataTable();
DataA_dapter = new SqlDataAdapter();

Sql_Cmd = new SqlCommand();
Sql_Cmd.Connection = Sql_Conn; // 

string sql = "RESTORE DATABASE  [" + str_directory + "] From DISK = " +
                        "'" + strFileName + "' ; ";
// str_directory is the source of my database as DB.MDF
// srtFileName is the directory of DB.bak
Sql_Cmd.CommandType = CommandType.Text;
Sql_Cmd.CommandText = sql;

try
{
    Sql_Cmd.ExecuteNonQuery();
}
catch (SqlException Error_Exception)
{
   MessageBox.Show("Error");
}

Когда я использую string sql в SQL Sserver с новым запросом, у меня нет проблем, и моя база данных успешно восстанавливается, но когда я использую этот код с c #, я вижу эту ошибку

Ошибка: {System.Data.SqlClient.SqlException: RESTORE не может обработать базу данных 'E: /DB.mdf', поскольку она используется этим сеансом. Это рекомендуется использовать основную базу данных при выполнении этого операция. ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ завершается ненормально.

Я хочу восстановить свою базу данных. Я должен открыть соединение при первом из моих кодов, и когда я хочу восстановить свою базу данных, я вижу исключение.

Теперь, как я могу восстановить свою базу данных? Пожалуйста, помогите мне.

Ответы [ 4 ]

5 голосов
/ 06 августа 2011

Невозможно восстановить базу данных, к которой вы подключены. Как упоминается в сообщении об ошибке, вы должны использовать базу данных master.

В строке подключения используйте database=master.

3 голосов
/ 06 августа 2011

Вам необходимо подключиться к базе данных, отличной от той, которую вы пытаетесь восстановить.Установите другую базу данных (начальный каталог) в строке подключения, подключитесь, затем запустите код.

Посмотрите, как восстановить базу данных sql-сервера С помощью кода C # для той же проблемы.

2 голосов
/ 06 августа 2011

Проблема в том, что строка подключения инициализируется с исходным каталогом (или базой данных), установленным для базы данных, которую вы хотите восстановить. Это приводит к тому, что соединение становится активным (это можно проверить, выполнив системную хранимую процедуру sp_who2), что запрещает вам выполнять восстановление. Вы должны установить значение вашего Первоначального каталога (или базы данных) в строке соединения для основной базы данных. Это должно оставить вашу целевую базу данных свободной от соединений и позволит вам выполнить процесс восстановления.

1 голос
/ 06 августа 2011

Проверьте строку подключения. Если он содержит параметр «Начальный каталог», установите для него значение «Мастер».

...