исходя из вашего вопроса, вы пытаетесь просто перенести базу данных с одной машины на другую, верно? Вам нужно будет рассмотреть некоторые переменные, например, вам нужно создать базу данных? Как приложение будет общаться с каждой машиной? Необходимо будет рассмотреть несколько других переменных; однако маршрут, который я, скорее всего, выбрал бы, - это создать желаемый веб-сервис.
Веб-служба позволит вам решить, будете ли вы вытягивать локальную базу данных на сервер или сервер на свой локальный компьютер, или какие-либо требования, которые могут потребоваться.
Без этих требований задача усложняется. Однако, если вы подумаете о своей проблеме в меньшем масштабе, она станет совершенно ясной.
- Убедитесь, что первичная база данных существует
- Дайте команду сделать резервную копию
- Создать новую базу данных
- Убедитесь, что ваша вновь созданная база данных существует
- Запустите команду для восстановления резервной копии
По сути, это все, что вам нужно сделать, один класс может сделать это.
Вам нужно будет создать логику для методов, которые это вызывает; но есть идея сделать ваш запрос на той же машине; что не так уж отличается от вашего запроса.
if(IsDatabaseInExistence(server.TemplateName) == true)
CreateSQLDatabase(customer.WebAddress);
if(IsDatabaseInExistence(customer.WebAddress) == true)
RestoreSQLDatabase(server.TemplateName, customer.WebAddress);
Метод, который принимает параметры, затем вызывает пару частных методов, и вы выполнили свою задачу. Однако для достижения цели попробуйте использовать parameters
, если вы выдаете необработанный SqlCommand
, вы можете сделать его восприимчивым к внедрению SQL.
Плохая практика:
using(SqlConnection connectionForSQL = new SqlConnection(@"Server=localhost; Integrated Security=SSPI; Database=master"))
{
string restoreSQLDb =
"RESTORE FILELISTONLY FROM DISK='C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\Backup\\" + templateName + ".bak'"
+ "RESTORE DATABASE [" + webAddress + "] FROM DISK='C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\Backup\\" + templateName + ".bak'"
+ "WITH "
+ "MOVE 'Parent' TO 'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\" + webAddress + ".mdf',"
+ "MOVE 'Parent_log' TO 'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\" + webAddress + "_log.ldf',"
+ "REPLACE";
using(SqlCommand restoreDbCommand = new SqlCommand(restoreSQLDb, connectionForSQL))
{
connectionForSQL.Open();
restoreDbCommand.ExecuteNonQuery();
}
}
Кроме того, в примере я забыл указать метод резервного копирования, но вы поняли.
Однако я думаю, что ваша проблема заключается в переносе с одной машины на другую. Я бы посмотрел на Windows Communication Foundation Services (WCF). Это должно обеспечить гибкость для связи с другой машиной и выполнения целого ряда задач.
К сожалению, у меня нет точных требований, поэтому мне действительно сложно вам помочь.
Надеюсь, это укажет вам правильное направление.
person
Greg
schedule
18.12.2013