在 C# 中恢复数据库的问题

Posted

技术标签:

【中文标题】在 C# 中恢复数据库的问题【英文标题】:Problem In Restore Database In C# 【发布时间】:2011-08-06 17:56:28 【问题描述】:

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

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

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

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

【问题讨论】:

How to restore SQL Server database through C# code的可能重复 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

See how to restore sql-server database Through C# code 解决同样的问题。

【讨论】:

【参考方案3】:

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

【讨论】:

谢谢。但是我如何打开主数据库以及该数据库的连接字符串是什么。我这样做但我看到了这个错误:>尝试为文件 master.mdf 附加一个自动命名的数据库失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享中 你的连接字符串应该是这样的 【参考方案4】:

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

【讨论】:

谢谢。但是我如何打开主数据库以及该数据库的连接字符串是什么。我这样做但我看到了这个错误:>尝试为文件 master.mdf 附加一个自动命名的数据库失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享中 @Masoud Abasian,你能显示你的连接字符串(没有密码!)吗?

以上是关于在 C# 中恢复数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章

C# SQL 将数据库恢复到默认数据位置

如何从 C# 恢复数据库

SQL Server 2005 与VS2005编程语言C# winform实现数据库备份与恢复。

在 C# 中暂停/恢复上传

在 C# WPF 中恢复下载

如何在 C# 中暂停和恢复音频