2

我已经定义了每件事,这段代码是我代码的一部分

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”,因为它正在被此会话使用。建议在执行此操作时使用 master 数据库。RESTORE DATABASE 异常终止。

我想恢复我的数据库。我必须在我的第一个代码中打开连接,当我想恢复我的数据库时,我看到了异常。

现在如何恢复我的数据库?请帮我。

4

4 回答 4

5

您无法还原已连接到的确切数据库。正如错误消息所述,您应该改用master数据库。

在您的连接字符串中使用database=master.

于 2011-08-06T18:04:07.373 回答
3

您需要连接到与您尝试恢复的数据库不同的数据库。在连接字符串中设置不同的数据库(初始目录),连接,然后运行代码。

查看如何通过 C# 代码恢复 sql-server 数据库以解决相同的问题。

于 2011-08-06T18:05:22.513 回答
2

问题是您的连接字符串正在初始化,初始目录(或数据库)设置为您要还原的数据库。这会导致连接处于活动状态(您可以通过执行 sp_who2 系统存储过程来检查),从而禁止您进行恢复。您应该在连接字符串中设置初始目录(或数据库)值到主数据库。这应该使您的目标数据库没有连接,并允许您执行还原过程。

于 2011-08-06T18:06:29.310 回答
1

检查连接字符串。如果它包含初始目录设置,请将其设置为 Master。

于 2011-08-06T18:05:40.533 回答