Проблемы с восстановлением базы данных SQL Server

127
13

Я работаю часами, пытаясь понять, почему я не могу заставить свое приложение С# восстановить базу данных SQL Server 2008. Я использую следующий код:

var conn = new SqlConnection("SERVER=Server;DATABASE=master;User ID=sa;Pwd=Password");
var srvConn = new ServerConnection(conn);
var srv = new Server(srvConn);

Restore res = new Restore();
res.Database = "RestoredDatabase";
res.Action = RestoreActionType.Database;
res.Devices.AddDevice("Path to .bak-file", DeviceType.File);
res.ReplaceDatabase = false;
res.SqlRestore(srv);

Когда я запускаю код, ничего не происходит. Ошибок и исключений не возникает! Я смотрю вокруг Интернета на решение, но все примеры точно такие же, поэтому никакой помощи нет.

Может быть, проблема с соединением или, может быть, проблема с.bak файлом?

Я удивлен, что нет реальных возможностей отладки, таких как исключения при использовании объектов из Microsoft.SqlServer.Management.Smo.

спросил(а) 2011-08-30T15:56:00+04:00 9 лет, 1 месяц назад
1
Решение
57

Вы также можете перевернуть свой собственный код, если хотите. Я использую это в некоторых интеграционных тестах для восстановления баз данных в чистое состояние. Я переустанавливаю базу данных в однопользовательский режим, поэтому, если кто-то подключен к ней, она отключит их, чтобы я мог ее восстановить.

StringBuilder sb = new StringBuilder();
sb.Append("ALTER DATABASE ");
sb.Append(" [");
sb.Append(databasename);
sb.Append("] ");
sb.Append(" SET SINGLE_USER WITH ROLLBACK IMMEDIATE;");
sb.Append("RESTORE DATABASE ");
sb.Append(" [");
sb.Append(databasename);
sb.Append("] ");
sb.Append(@" FROM DISK = N'D:\SQLBACKUPS\AUTOMATION\");
sb.Append(backupfilename);
sb.Append("' WITH FILE=1, NOUNLOAD, REPLACE, STATS=10");
return sb.ToString();

Затем просто создайте объект команды sql и передайте результаты из построителя строк в виде текста команды и выполните.

ответил(а) 2011-08-30T19:03:00+04:00 9 лет, 1 месяц назад
57

    Сначала попробуйте восстановить базу данных с помощью параметров студии управления, используя ту же информацию аутентификации и тот же.BAK. Если это не работает, проблема не в вашем коде. Если первый эксперимент работал нормально, и, судя по тому, что база данных уже создана, убедитесь, что никто не подключен к ней перед запуском восстановления. Вы можете выполнить команду sp_who2 в Sql Server, чтобы убедиться, что нет связей с этой базой данных.

ответил(а) 2011-08-30T16:59:00+04:00 9 лет, 1 месяц назад
42

Это могут быть некоторые проблемы с разрешением, из-за которых иногда иногда восстановление не происходит. Попробуйте восстановить файл ".bak" сначала с помощью ваших локальных баз данных, доступ к которым можно получить с вашим именем пользователя и паролем. Любой, как посетить сайт Sql BackupRestore для получения более подробной информации о Sql Backup с помощью С#.net. Надеюсь, это поможет вам.

ответил(а) 2011-08-30T16:02:00+04:00 9 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема