2

私はすでにすべてのものを定義しており、このコードは私のコードの一部です

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'を処理できません。この操作を実行するときは、マスターデータベースを使用することをお勧めします。RESTOREDATABASEが異常終了しています。

データベースを復元したい。コードの最初で接続を開く必要があり、データベースを復元したいときに例外が表示されます。

データベースを復元するにはどうすればよいですか?私を助けてください。

4

4 に答える 4

5

接続した正確なデータベースを復元することはできません。エラーメッセージに記載されているように、master代わりにデータベースを使用する必要があります。

接続文字列では、を使用しますdatabase=master

于 2011-08-06T18:04:07.373 に答える
3

復元しようとしているデータベースとは別のデータベースに接続する必要があります。接続文字列に別のデータベース(初期カタログ)を設定し、接続してからコードを実行します。

同じ問題については、C#コードを使用してSQL-Serverデータベースを復元する方法を参照してください。

于 2011-08-06T18:05:22.513 に答える
2

問題は、接続文字列が、復元するデータベースに設定された初期カタログ(またはデータベース)で初期化されていることです。これにより、接続がアクティブになり(sp_who2システムストアドプロシージャを実行することでこれを確認できます)、復元を実行できなくなります。マスターデータベースへの接続文字列に初期カタログ(またはデータベース)の値を設定する必要があります。これにより、ターゲットデータベースが接続されなくなり、復元プロセスを実行できるようになります。

于 2011-08-06T18:06:29.310 に答える
1

接続文字列を確認してください。初期カタログ設定が含まれている場合は、マスターに設定します。

于 2011-08-06T18:05:40.533 に答える