2016-05-25 1 views
0

Вот мой код, он работает, когда база данных имеет таблицу «UserInformation»Как создать новую таблицу в базе данных, если таблица не существует (C#)

public bool Save() 
{ 
     using (SqlConnection connection = new SqlConnection(ConnectionString) 
     { 
      connection.Open(); 

      using (SqlTransaction transaction = connection.BeginTransaction()) 
      { 
       try 
       { 
        using (var adapter = new UserInformationTableAdapter()) 
        { 
         adapter.Connection = connection; 
         adapter.Transaction = transaction; 

         var table = new HelloDataSet.UserInformationDataTable(); 
         HelloDataSet.UserInformationRow row = table.NewUserInformationRow(); 
         row.UserName = userName; 
         row.Password = password; 
         row.Brithday = brithday; 
         table.Rows.Add(row); 
         adapter.Update(table); 

         transaction.Commit(); 
         return true; 
        } 
       } 
       catch (Exception e) 
       { 
        transaction.Rollback(); 
        return false; 
       } 
       finally 
       { 
        connection.Close(); 
       } 
      } 
} 

Однако, когда нет ни одной таблицы в базе данных он не будет создавать таблицу «UserInformation» в базе данных, она перейдет к исключению «catch» в строке «adapter.Update (table)»;

Так что мой вопрос: как создать новую таблицу в базе данных, если в ней нет таблицы «UserInformation». Кроме того, если в базе данных уже есть таблица «UserInformation», я могу добавить новый столбец «Позиция» в этой таблице?

+0

Я не уверен, что вы просите. Вы пытаетесь вставить строки в таблицу, которая может не существовать? Вы хотите, чтобы сервер базы данных автоматически создавал таблицу с конкретной структурой поля, если таблица отсутствует? (Почему таблица не будет?) Я бы предложил создать таблицу с помощью команды CREATE TABLE или с помощью интерактивного инструмента, такого как SQL Server Management Studio. Кроме того, вы не указываете, с какой базой данных вы работаете. Пометка этого вопроса соответственно улучшит релевантность ответов. –

+0

Я хочу, чтобы сервер базы данных автоматически создавал таблицу. Причина в том, что я позволю пользователю выбрать базу данных, поэтому, если пользователь переключится на новую базу данных, мое приложение должно будет создать эту таблицу в новой базе данных. –

+1

Вам понадобится создать сценарий или серию операторов SQL, выполняемых вашей программой. Хранимые процедуры или триггеры отсутствуют, потому что если база данных новая, для создания таблиц не будет таблиц или кода. Я бы проверил наличие одной из ваших таблиц и попросил пользователя «инициализировать таблицы для (имя приложения)?» и если пользователь говорит «да», запустите свой скрипт или набор операторов SQL CREATE TABLE. –

ответ

0

Наконец, я получил ответ и хочу поделиться им. Во-первых, я должен сказать, что я поставил свой вопрос неправильно. Я действительно хочу, у меня есть приложение, и это приложение связано с базой данных. Тем не менее, я разрешаю пользователю переключать базу данных. Поэтому, когда пользователь переключается на новую базу данных, я бы хотел, чтобы приложение скопировало всю структуру базы данных (не включая данные) из старой в новую. Кроме того, если я сделаю какое-то изменение (можно добавить новый столбец для одной или нескольких таблиц или добавить другую новую таблицу) для базы данных в моем коде приложения, я хотел бы, чтобы каждая другая база данных знала обновления и делала то же самое изменение, запустив мой новый код приложения.


Итак, вот мое решение. Я пишу структуру под названием «SchemaManager». Он создаст дополнительную таблицу в каждой базе данных, эта таблица содержит версию базы данных. Таким образом, каждый раз, когда я запускаю свое приложение, «SchemaManager» проверяет номер версии базы данных жесткого кода на номер версии базы данных, если номер версии базы данных жесткого кода больше, чем номер версии базы данных, «SchemaManager» проверит изменение и сделайте обновление для меня.


Я знаю, что мое решение не лучшее, но это то, что я сделал. Если у кого-нибудь есть другое решение, пожалуйста, поделитесь со мной и другими людьми.

Смежные вопросы