Основываясь на вашем вопросе, вы пытаетесь просто перенести базу данных с одной машины на другую правильно? Вам нужно будет рассмотреть некоторые переменные, например, вам нужно создать базу данных? Как приложение будет говорить с каждой машиной? Необходимо будет рассмотреть несколько других переменных; однако маршрут, который я, скорее всего, предпримет, - это создать желаемый веб-сервис.
Веб-сервис позволит вам решить, потянет ли вы локальную базу данных на сервер или сервер на локальную машину или какие-либо требования, которые могут потребоваться.
Без этих требований задача становится сложной задачей. Однако, если вы думаете о своей проблеме в меньших масштабах, становится совершенно ясно.
- Проверка первичной базы данных существуют
- Issue команду сделать резервную копию
- Создать новую базу данных
- Проверка вновь созданной базы данных существуют
- Выполнить команду, чтобы восстановить резервную копию
Это, по сути, все, что вам нужно выполнить, это может сделать один класс.
Вам нужно будет создать логику для методов, которые это вызовет; но это идея сделать ваш запрос на той же машине; который не отличается от вашего запроса.
if(IsDatabaseInExistence(server.TemplateName) == true)
CreateSQLDatabase(customer.WebAddress);
if(IsDatabaseInExistence(customer.WebAddress) == true)
RestoreSQLDatabase(server.TemplateName, customer.WebAddress);
Метод, который принимает параметры, а затем вызывает пару частных методов, и вы выполнили свою задачу.На ваш квест, хотя для достижения, попробуйте использовать parameters
, если вы выдаете необработанный SqlCommand
, вы можете сделать его восприимчивым к SQL Injection.
Bad Practice:
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). Это должно обеспечить гибкость для связи с другой машиной и выполнения разнообразных задач.
К сожалению, у меня нет точных требований, поэтому вам действительно сложно помочь.
Надеюсь, это указывает на то, что вы в правильном направлении.
Я не парень C#, поэтому я не могу полностью ответить на ваш вопрос. Однако, если вы просто используете резервную копию, почему бы просто не использовать команду SQL для создания резервной копии, а затем переместить ее с помощью сценария C# и использовать команду SQL для ее восстановления. – Zane
Если вы используете инфраструктуру сущности, вы можете просто создать инфраструктуру сущности, устанавливающую базу данных, и все исходные данные, когда приложение будет запущено. После того, как EF установит базу данных, вы затем будете использовать инфраструктуру Sync для обновления между двумя экземплярами файлов базы данных. –