2015-01-20 2 views
0

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

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

Редактировать Я думаю, что я раньше не был ясен.

Я создаю базу данных следующим образом:

using (var conn = new SqlConnection("data source=MySource; uid=MyUser; pwd=MyPassword;")) 
    { 
     using (var cmd = new SqlCommand()) 
     { 
     conn.Open(); 
     cmd.Connection = conn; 
     cmd.CommandText = "Create Database MYNewDB;"; 
     cmd.ExecuteNonQuery(); 
     } 
    } 

Есть ли способ (после этого) выполнять сценарии, сохраненные в файл .sql для создания таблицы и значения для этой новой базы данных?

+2

Сколько людей вы ожидаете? Вы думали о сценариях обновления? Для меня это звучит очень болезненная архитектура. Было бы гораздо проще добавить столбец для UserID в каждую таблицу и убедиться, что каждый запрос имеет эту дополнительную проверку. –

+0

Сторона примечания: «Поиск alot» не является полезной информацией в сообщении. Пожалуйста, либо покажите, какие подходы вы нашли, которые не работали (например, ссылка + описание одного предложения была бы идеальной), либо вообще не добавляйте такой текст. То есть «попытался [Создать БД программно] (http://stackoverflow.com/questions/9015142/creating-a-database-programmatically-in-sql-server), но XXXX не позволяет мне это делать») –

+0

@SeanLange это для веб-версию программного обеспечения, разработанного моей компанией. Если только 20% наших клиентов придерживаются, мы говорим о 350 - 450 клиентах, у которых может быть более одного пользователя, а в таблицах они будут включать своих клиентов. Я думаю, что лучше всего хранить базу данных для каждого клиента. – FabioG

ответ

0

нашел решение на this answer.

using (var conn = new SqlConnection("data source=MySource; initial catalog=MYNewDB;persist security info=True;user id=MyUser;password=MyPassword;multipleactiveresultsets=True; ")) 
{ 
    string script = File.ReadAllText(@"C:\Somewhere\...\script.sql"); 

    // split script on GO command 
    IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$", RegexOptions.Multiline | RegexOptions.IgnoreCase); 

    conn.Open(); 
    foreach (string commandString in commandStrings) 
    { 
     if (commandString.Trim() != "") 
     { 
     using (var command = new SqlCommand(commandString, conn)) 
     { 
      command.ExecuteNonQuery(); 
     } 
     } 
    } 
    conn.Close(); 
} 
Смежные вопросы