Как мне удалить всю базу данных и воссоздать ее с помощью sql и c #?

#c# #sql #sql-server-2008

#c# #sql #sql-server-2008

Вопрос:

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

Комментарии:

1. Когда вы говорите «воссоздать базу данных», вам все еще нужны данные или просто схема объекта?

2. В чем смысл? (т. Е., Пожалуйста, объясните мотивацию, могут быть более простые способы достижения вашей конечной цели)

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

Ответ №1:

Вы можете использовать Microsoft.SqlServer.Management.Smo пространство имен для создания сценария, как и в ssms. Может потребоваться несколько попыток, чтобы правильно настроить параметры сценариев, поэтому не переусердствуйте и сразу же начинайте удалять вещи.

После того, как вы сгенерировали свой скрипт, было бы просто ExecuteNonQuery("drop database foo") удалить вашу базу данных.

Чтобы воссоздать, используйте то же пространство имен для выполнения скрипта. Использование обычного ExecuteNonQuery не будет работать, потому что сценарий будет содержать «GO», который не является допустимым sql. SMO содержит логику для обработки этого.

 FileInfo file = new FileInfo("C:\script.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection connection = new SqlConnection(connectionString);
Server server = new Server(new ServerConnection(connection ));
server.ConnectionContext.ExecuteNonQuery(script);
 

Конечно, предполагается, что для входа в систему используется пользователь, имеющий соответствующие разрешения на сервере sql.

Ответ №2: