2

C#コードを使用してSQLデータベースを復元しようとしています。バックアップは正常に機能しています。しかし、データベースを復元すると、エラーが発生します。Microsoft.SqlServer.Management.Smo;この操作にはを使用しています。エラーは{"System.Data.SqlClient.SqlError:RESTOREはデータベース'TempDb'を処理できません。これは、このセッションで使用されているためです。この操作を実行するときは、マスターデータベースを使用することをお勧めします。"}

いくつかの投稿では、データベースをマスターに設定すると書かれています。私もそれを試しましたが、同じエラーが発生します。接続文字列:connectionString = @ "server =(local); Initial Catalog = Master; Integrated Security = True;";

私のコードは次のとおりです。

openFileDialog1.ShowDialog();
        string databaseName = "TempDb";
        Restore sqlRestore = new Restore();

        BackupDeviceItem deviceItem = new BackupDeviceItem(openFileDialog1.FileName, DeviceType.File);
        sqlRestore.Devices.Add(deviceItem);
        sqlRestore.Database = databaseName;

        DataConnection dataConnection = new DataConnection();
        ServerConnection connection = new ServerConnection(dataConnection.DataBaseConnection);
        Server sqlServer = new Server(connection);

        Database db = sqlServer.Databases[databaseName];
        sqlRestore.Action = RestoreActionType.Database;
        String dataFileLocation = db.FileGroups[0].Files[0].FileName;
        String logFileLocation = db.LogFiles[0].FileName;
        db = sqlServer.Databases[databaseName];
        RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);


        sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
        sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
        sqlRestore.ReplaceDatabase = true;
        sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
        sqlRestore.PercentCompleteNotification = 10;
        sqlRestore.PercentComplete += new PercentCompleteEventHandler(sqlRestore_PercentComplete);
        sqlRestore.SqlRestore(sqlServer);
        db = sqlServer.Databases[databaseName];
        db.SetOnline();
        sqlServer.Refresh();
4

3 に答える 3

2
this code For Restore Database,Please Type Code In C#:

SqlConnection ObjConnection=new SqlConnection("Your Connection String");
ObjConnection.Open();
                SqlCommand ObjCommand = new SqlCommand();
                ObjCommand.Connection = ObjConnection;
                ObjCommand.CommandText = "Use Master   ALTER DATABASE YourDatabaseName SET                 OFFLINE WITH ROLLBACK IMMEDIATE  " +
                "Restore Database YourDatabaseName From Disk='" + LblPath.Text + "'" +
                "   ALTER DATABASE YourDatabaseName SET ONLINE WITH ROLLBACK IMMEDIATE";
                ObjCommand.CommandType = CommandType.Text;
                ObjCommand.ExecuteNonQuery();
Help:LblPath.Text is a Label Control Contain Path Backup Database You!
Mojtaba From IRAN
于 2013-06-28T13:00:20.237 に答える
0

このコードはデータベースを復元するためのものです

var conString = System.Configuration.ConfigurationManager.ConnectionStrings["CONSTRING"];
string strConnString = conString.ConnectionString;
SqlConnection cs = new SqlConnection(strConnString);

        try
        {
            cs.Open();
            String sqlquery = "Use Master ALTER DATABASE databasename SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE databasename FROM DISK ='" + txtRestoreFileLoc.Text + "' ALTER DATABASE databasename SET ONLINE WITH ROLLBACK IMMEDIATE";
            SqlCommand cmd = new SqlCommand(sqlquery, cs);
            cmd.ExecuteNonQuery();
            cs.Close();
            cs.Dispose();
            MessageBox.Show("restore complete");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }
于 2015-09-17T06:36:17.120 に答える
0

あなたのデータベースは他のログインによってまだ使用されているようです。復元する前にシングル ユーザー モードにしてみてください。同じ接続オブジェクトを使用してデータベースをシングル ユーザー モードにし、復元してからマルチ ユーザー モードに戻すようにしてください。

あなたはこれを試すことができます、

SqlConnection connection = new SqlConnection("connection string");
SqlCommand cmd = new SqlCommand("ALTER DATABASE <database name> SET SINGLE_USER WITH ROLLBACK IMMEDIATE", connection);

cmd.Connection.Open();
cmd.ExecuteNonQuery();

return connection; //to use the same connection for restore activity and setting it to multi user mode again


//up on completion of restore activity, take the database to multi user mode.
//ALTER DATABASE <database name> SET MULTI_USER
于 2012-09-03T07:54:18.120 に答える