我已经定义了所有内容,而且这段代码是我代码的一部分
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");
}
当我在SQL Sserver中使用string sql
时使用新查询我没有问题,我的数据库恢复成功但是当我使用c#的代码时我看到了这个错误
错误:{System.Data.SqlClient.SqlException:RESTORE不能 处理数据库'E:/DB.mdf',因为它正在被此会话使用。它 建议在执行此操作时使用master数据库 操作。 RESTORE DATABASE异常终止。
我想恢复我的数据库。我必须在我的第一个代码中打开连接,当我想恢复我的数据库时,我看到了Exception。
现在我该如何恢复我的数据库?请帮助我。
答案 0 :(得分:5)
您无法恢复已连接的确切数据库。正如错误消息所提到的,您应该使用master
数据库。
在您的连接字符串中使用database=master
。
答案 1 :(得分:3)
您需要连接到与尝试还原的数据库不同的数据库。在连接字符串中设置不同的数据库(初始目录),连接,然后运行代码。
See how to restore sql-server database Through C# code针对同样的问题。
答案 2 :(得分:2)
问题是您正在初始化连接字符串,并将初始目录(或数据库)设置为要还原的数据库。这会导致连接处于活动状态(您可以通过执行sp_who2系统存储过程来检查),从而禁止您进行恢复。您应该将连接字符串中的初始目录(或数据库)值设置为master数据库。这应该使目标数据库不受连接影响,并允许您执行还原过程。
答案 3 :(得分:1)
检查连接字符串。如果它包含初始目录设置,则将其设置为主。