c#中恢复数据库的问题

本文关键字:问题 数据库 恢复 | 更新日期: 2023-09-27 18:04:37

我已经定义了所有东西,这段代码是我的代码的一部分

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 ',因为它正在被这个会话使用。它执行此操作时是否建议使用主数据库操作。

恢复数据库异常终止。

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

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

c#中恢复数据库的问题

无法还原所连接的数据库。正如错误消息所提到的,您应该使用master数据库。

在你的连接字符串使用database=master

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

查看如何通过c#代码恢复sql-server数据库。

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

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