C# восстановление базы данных с помощью microsoft. sqlserver.management. smo 5(доступ запрещен)
Эй,
Я пытаюсь восстановить БД с помощью
Microsoft.SqlServer.Management.Smo
но мне все время отказывают в доступе.Я настроил пользователя службы для экземпляра (MSSQL$LOCAL2016) с полными правами доступа к папке
Папка является папкой по умолчанию для экземпляра (хотя то же самое нельзя сказать, когда я перехожу к производству)
Я создаю папки в C#
rstDatabase.SqlRestore(sqlServer);
завершается с ошибкой:Цитата:Операционная система вернула ошибку "5(Доступ запрещен.)" при попытке "RestoreContainer:: ValidateTargetForCreation" on "C:\Database\Rates.setuptest\Data".
Файл 'RateUploader' не может быть восстановлен в 'C:\Database\Rates.setuptest\Data". Использовать с ходу определить действительное местоположение файла.
Операционная система вернула ошибку "5(Доступ запрещен.)" при попытке "RestoreContainer:: ValidateTargetForCreation" on "C:\Database\Rates.setuptest\Logs".
Файл 'RateUploader_log' не может быть восстановлен в 'C:\Database\Rates.setuptest\Logs". Использовать с ходу определить действительное местоположение файла.
Проблемы были выявлены при планировании инструкции RESTORE. Предыдущие сообщения содержат подробную информацию.
Восстановление базы данных завершается ненормально.
Кажется, достаточно прямолинейно. Упускаю ли я очевидное или есть что-то тонкое, чего я не осознаю?
Спасибо ^_^
Энди
Что я уже пробовал:
public static bool RestoreDatabase(String databaseName) { MySqlConnectionStringBuilder stringBuilder = new MySqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["adminSqlAccess"].ConnectionString); string serverName = stringBuilder.Server, userName = stringBuilder.UserID, password = stringBuilder.Password, pFileLocation = string.Format(ConfigurationManager.AppSettings["dbPath"], databaseName, "Data"), lFileLocation = string.Format(ConfigurationManager.AppSettings["dbPath"], databaseName, "Logs"), bakFileLocation = ConfigurationManager.AppSettings["bakDbPath"]; if (!Directory.Exists(pFileLocation)) Directory.CreateDirectory(pFileLocation); if (!Directory.Exists(lFileLocation)) Directory.CreateDirectory(lFileLocation); ServerConnection connection = new ServerConnection(serverName, userName, password); Server sqlServer = new Server(connection); Restore rstDatabase = new Restore(); rstDatabase.Action = RestoreActionType.Database; rstDatabase.Database = $"Rates.{databaseName}"; rstDatabase.RelocateFiles.Add(new RelocateFile("RateUploader", pFileLocation)); rstDatabase.RelocateFiles.Add(new RelocateFile("RateUploader_log", lFileLocation)); BackupDeviceItem bkpDevice = new BackupDeviceItem(bakFileLocation, DeviceType.File); rstDatabase.Devices.Add(bkpDevice); rstDatabase.ReplaceDatabase = true; rstDatabase.SqlRestore(sqlServer); return true; }
Конфиг:
<connectionStrings> <add name="adminSqlAccess" connectionString="Data Source=.\LOCAL2016;Initial Catalog=SystemManager2.0;Persist Security Info=True;User ID=sa;Password=xxxxxxxx" /> </connectionStrings> <appSettings> <!-- ... --> <add key="dbPath" value="C:\Database\{0}\{1}"/> <add key="bakDbPath" value="C:\Database\blank\20170228-blank.bak"/> </appSettings>