2011-08-06 129 views
2

我已经定义了每一件事情,这代码是我的代码问题在还原数据库在C#

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:恢复无法 过程数据库“E:/DB.mdf”,因为它是在使用了本会话。建议在执行此 操作时使用主数据库 。 RESTORE DATABASE正在异常终止。

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

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

+0

[如何通过C#代码恢复SQL Server数据库](http://stackoverflow.com/questions/4218960/how-to-restore-sql-server-database-through-c-code) –

回答

1

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

+0

感谢你。但我怎样才能打开主数据库和什么是这个数据库的连接字符串。我这样做,但我看到这个错误:>尝试附加文件master.mdf自动命名的数据库失败。一个名字相同的数据库存在,或者指定的文件不能被打开,或者它位于UNC分享 –

+0

@Masoud Abasian,你能显示你的连接字符串(没有密码!)吗? –

5

您无法恢复已连接的确切数据库。如错误消息所述,您应该使用master数据库。

在您的连接字符串中使用。

2

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

+0

谢谢。但我怎样才能打开主数据库和什么是这个数据库的连接字符串。我这样做,但我看到这个错误:>尝试附加文件master.mdf自动命名的数据库失败。名称相同的数据库存在,或指定的文件无法打开,或位于UNC共享上 –

+0

您的连接字符串应该是这样的