gpt4 book ai didi

sql-server-2005 - 如何将 SQL Server 数据库备份恢复到新创建的数据库?

转载 作者:行者123 更新时间:2023-12-04 00:46:49 25 4
gpt4 key购买 nike

我有一个名为 backupdb.bak 的 SQL Server 2005 数据库备份。我想将它恢复到数据库 MyDatabase

但在恢复之前,我必须检查 MyDatabase 是否已经存在。如果是这样,我将创建一个名为 MyDatabaseNew 的新数据库,并将备份文件还原到这个新数据库。

如果我直接将文件恢复到 MyDatabase 中,则该过程运行良好。但是当我检查 MyDatabase 是否存在并尝试创建名为 MyDatabaseNew 的新数据库时,出现错误:

Restore failed for Server servername

我的代码是这样的:

Restore restore = new Restore();
restore.Action = RestoreActionType.Database;
CreateDatabase(MyDatabaseNew);
restore.Database = MyDatabaseNew;
restore.ReplaceDatabase = true;

BackupDeviceItem deviceItem = new BackupDeviceItem("C:\\backupdb.bak",DeviceType.File);
restore.Devices.Add(deviceItem);
SqlConnection sqlCon = new SqlConnection("Data Source=.;Initial Catalog=MyDatabaseNewIntegrated Security=True;User ID=uid; Pwd=Pwd");
ServerConnection connection = new ServerConnection(sqlCon);
sqlCon.Open();

Microsoft.SqlServer.Management.Smo.Server smoServer = new Server(new ServerConnection("."));
if (File.Exists("C:\\backupdb.bak"))
// restore
restore.SqlRestore(smoServer);
if (sqlCon.State == ConnectionState.Open)
sqlCon.Close();

我的创建数据库(如果 MyDatabase 存在)代码如下所示,我将 MyDatabaseNew 作为该方法的参数传递:

public void CreateDatabase(string NewDBName)
{
string str;
SqlConnection myConn = new SqlConnection("Server=.;Integrated security=True;
database=master;User ID=uid;Password=Pwd");

str = "CREATE DATABASE " + NewDBName + "";
SqlCommand myCommand = new SqlCommand(str, myConn);
try
{
myConn.Open();
myCommand.ExecuteNonQuery();
MessageBox.Show("New DataBase is Created Successfully", "Database Creation",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString(), "Database Creation", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
finally
{
if (myConn.State == ConnectionState.Open)
{
myConn.Close();
}
}
}

谁能告诉我哪里出错了?

最佳答案

当恢复到新的数据库时,你需要使用等价于Transact-SQL's RESTORE DATABASE ... WITH MOVE ... statement为数据和日志文件指定新名称:

restore.RelocateFiles.Add(new RelocateFile("MyDatabase", @"c:\MyDatabaseNew.mdf"));
restore.RelocateFiles.Add(new RelocateFile("MyDatabase_Log", @"c:\MyDatabaseNew.ldf"));

更多信息:Getting Started with SMO in SQL 2005 - Restores

关于sql-server-2005 - 如何将 SQL Server 数据库备份恢复到新创建的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com