Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление столбца в БД MS Access на C#, Не выполняется запрос ALTER TABLE 
:(
    Опции темы
Cep3ga
Дата 30.11.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Прошу помощи...
Необходимо добавить Column в БД MS Access (mdb). 
Создал все необходимое, и воспользовался советом создания соединения и выполнения запроса от сюда: 
http://forum.vingrad.ru/topic-92108.html. Все отрабатывается нормально, а вот только Столбец не создается... Может чего-то не так делаю?
Вот пример кода на всякий случай:
Код

using (OleDbConnection conn = pLmainTableAdapter.Connection)
            {
                try
                {
                    // Открываем соединение
                    conn.Open();
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
                OleDbTransaction trans = pLmainTableAdapter.Connection.BeginTransaction();
                OleDbCommand OC = new OleDbCommand("", pLmainTableAdapter.Connection, trans);
                OC.CommandText = "ALTER TABLE TABLE1 ADD COLUMN NEW_Column Currency";
                try
                {
                    // Execute выбирай по вкусу, в зависимости от твоих целей
                    OC.ExecuteNonQuery();
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show("Запрос не выполнился!" + ex.Message);
                    trans.Rollback(); // Делаем откат изменений
                    return;
                }
                // Если всё ОК, то проводим транзакцию
                trans.Commit();
            }


PM MAIL   Вверх
thomas
Дата 30.11.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Cep3ga, 
Приветствую.
Добро пожаловать на форум!  smile 
Код

ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Cep3ga
Дата 30.11.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Пишет: Невозможно найти поле "NullCOll". Выпадает Exception.
PM MAIL   Вверх
thomas
Дата 30.11.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Cep3ga, 
Так пиши в запросе свое название поля.
А вообще попробуй 
Код

ALTER TABLE TABLE1 ADD NEW_Column Currency
так
По идее должно добавить поле типа Currency с именем NEW_Column


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Cep3ga
Дата 30.11.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Спасибо...
Но тоже самое... Все проходит, а в таблице не создается колонка.
Пробовал в ручную в MS Access, через Конструктор Запросов выполнить запрос:
Код

ALTER TABLE TABLE1 ADD COLUMN NEW_Column Currency

Все создавалось. А вот через код не получается :(
PM MAIL   Вверх
thomas
Дата 30.11.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Cep3ga, 
Вот в этом месте
Код

try
                {
                    // Execute выбирай по вкусу, в зависимости от твоих целей
                    OC.ExecuteNonQuery();
                }

Проверь состояние соединения. Должно быть открытым, иначе упс.
Допиши просто conn.Open(); перед вызовом OC.ExecuteNonQuery();


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Cep3ga
Дата 30.11.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



На момент вызова OC.ExecuteNonQuery() -соединение открыто....
PM MAIL   Вверх
thomas
Дата 30.11.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Cep3ga, 
А не тут ли 
Код

// Если всё ОК, то проводим транзакцию
                trans.Commit();
 проблема? Для транзакции, я так понимаю,  тоже нужно соединение. А здесь оно открыто.



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
thomas
Дата 30.11.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Запиши этот кусок кода так
Код

try
{
    // Если всё ОК, то проводим транзакцию
                trans.Commit();
}



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Cep3ga
Дата 30.11.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Попробовал... Опять все еще не создается :(
PM MAIL   Вверх
1stain
Дата 30.11.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 5
Всего: 40



Код

        OleDbTransaction trans = pLmainTableAdapter.Connection.BeginTransaction();
        OleDbCommand OC = new OleDbCommand("", pLmainTableAdapter.Connection, trans);
        OC.CommandText = "ALTER TABLE TABLE1 ADD COLUMN NEW_Column Currency";
        try
        {
            // Execute выбирай по вкусу, в зависимости от твоих целей
            String result = String.Format("Строк добавлено {0}", OC.ExecuteNonQuery());
            MessageBox.Show(result);
            trans.Commit();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show("Запрос не выполнился!" + ex.Message);
            trans.Rollback(); // Делаем откат изменений
            return;
        }
        finally
        {
            trans.Dispose();
        }


посмотри, что напишет MessageBox


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Cep3ga
Дата 30.11.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



О! Добавилось smile Спасибо! Не могу понять в чем ошибка, вроде бы тоже самое все... 
только после одного добавления вылетает System.InvalidOperationException: The ConnectionString property has not been initialized. Хотя для соединения используется  (using (OleDbConnection conn = pLmainTableAdapter.Connection)) {}
PM MAIL   Вверх
1stain
Дата 30.11.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 5
Всего: 40



видимо объект Transaction при выполнении Dispose закрывает соединение, с которым он ассоциирован. Собственно непонятно, зачем коммитить каждую операцию - теряется весь смысл транзакций, кажая ккоманда как я понял у тебя выполняет одну операцию. Сделай примерно так
Код

        conn.Open();
        using (OleDbTransaction trans = conn.BeginTransaction())
        {
            try
            {
                string sql1 = "...";
                OleDbCommand command1 = new OleDbCommand(sql1, conn, trans);
                command1.ExecuteNonQuery();

                string sql2 = "...";
                OleDbCommand command1 = new OleDbCommand(sql2, conn, trans);
                command2.ExecuteNonQuery();

                //...

                trans.Commit();

            }
            catch (OleDbException e)
            {
                trans.Rollback();
            }
        }
        conn.Close();



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
voiger
Дата 22.1.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.6.2007
Где: Украина, Запорожь е

Репутация: нет
Всего: нет



про wizard: 
если данные в БД не обновляются, хотя всё остальное ОК, возможно, причина в этом:
http://msdn2.microsoft.com/en-us/library/ms246989.aspx

Это сообщение отредактировал(а) voiger - 22.1.2008, 16:41
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.