Как восстановить базу данных SQL Server 2012?

Как восстановить базу данных с SQL Server 2012?

Это мой код:

private void [connTes()][1]
{
        try
        {
            conString = "server=.\\SQLEXPRESS;database=db_datatestproject;user=admin;password=123;Integrated Security=True";
            connnn = new SqlConnection(conString);
            connnn.Open();
        }
        catch
        {
        }
}

private void button1_Click(object sender, EventArgs e)
{
        connTes();

        try
        {
            if (txtlocation.Text == "")
            {
                MessageBox.Show("select database");
                return;
            }
            else
            {
                string databesing = connnn.Database.ToString();
                string a = "ALTER DATABASE " + databesing + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE;";
                a += "RESTORE DATABASE "+databesing+" FROM DISK ='"+txtlocation.Text+"' WITH REPLACE;";

                SqlCommand cmd = new SqlCommand(a, connnn);
                SqlDataReader dr = cmd.ExecuteReader();
                connnn.Close();
                connnn.Dispose();

                MessageBox.Show("done restored");
            }
        }
        catch(SqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
}

Это ошибка, которую я получаю:

RESTORE не может обработать базу данных db_testproject, потому что она используется сеансом. При выполнении этой операции рекомендуется использовать основную базу данных. RESTORE DATABASE аварийно завершает работу.

Как исправить эту ошибку?

Любая помощь горячо приветствуется.

Спасибо.


person Sai    schedule 25.05.2018    source источник
comment
Поскольку вы не получаете обратно никаких данных из этого SqlCommand, используйте ExecuteNonQuery() вместо _3 _....   -  person marc_s    schedule 25.05.2018
comment
Я часто встречаюсь с этим вопросом. Чем отличается cmd.ExecuteNonQuery () от объявления SqlDataReader dr = cmd.ExecuteReader ()? Как я могу увидеть другое?   -  person Sai    schedule 25.05.2018


Ответы (1)


Добавлять

USE MASTER; 
GO

до начала вашей команды восстановления TSQL.

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

Также обратите внимание на комментарий @ marc_s: «Поскольку вы не получаете обратно никаких данных из этого SqlCommand, используйте ExecuteNonQuery() вместо ExecuteReader()»

person Mitch Wheat    schedule 25.05.2018