У меня есть резервная копия базы данных SQL Server 2005 с именем backupdb.bak
. Я хочу восстановить ее в базе данных MyDatabase
.
Но перед восстановлением я должен проверить, существует ли MyDatabase
или нет. Если это произойдет, я создаю новую базу данных с именем MyDatabaseNew
и восстанавливаю файл резервной копии в этой новой базе данных.
Если я напрямую восстанавливаю файл в MyDatabase
, процесс работает нормально. Но когда я проверяю существование MyDatabase
и пытаюсь создать новую базу данных с именем MyDatabaseNew
, выдается ошибка:
Не удалось восстановить серверное имя сервера
Мой код выглядит так:
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();
}
}
}
Может кто-нибудь сказать мне, где я иду не так?