在 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# 中恢复数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章