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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение таблицы MS Access 
V
    Опции темы
mr.Anderson
Дата 1.8.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Пытаюсь внести новую запись в таблицу Access. Создаю соединение через провайдера OleDb, все, как полагается. Пробую записывать в адаптер команды выборки - все хорошо, выбирается правильно. Хотел вставить новую запись. И тут начались проблемы. Я не понимаю, как заставить адаптер выполнить мой запрос.

Вот код метода для обработки поступающего запроса:
Код

/// <summary>
        /// Выполняет заданный запрос.
        /// </summary>
        /// <param name="query">Строка SQL-запроса.</param>
        /// <param name="queryType">Тип запроса.</param>
        /// <returns>Возвращает объект типа DataTable.</returns>
        public DataTable ExecuteQuery(string query, QueryType queryType)
        {
            bool flag = (_connection.State == ConnectionState.Closed);
            if (flag)
                OpenConnection(false);

            _command = new OleDbCommand(query, _connection);

            if (queryType == QueryType.Select)
            {
                _adapter.SelectCommand = _command;
                _adapter.Fill(_table);
                if (flag)
                    _connection.Close();
                return _table;
            }
            switch (queryType)
            {
                case QueryType.Insert:
                    _adapter.InsertCommand = _command;
                    break;
                case QueryType.Update:
                    _adapter.UpdateCommand = _command;
                    break;
                case QueryType.Delete:
                    _adapter.DeleteCommand = _command;
                    break;
            }
            if (flag)
                _connection.Close();
            return null;
        }

Т.е. в нашем случае, если я выполняю команду INSERT (встроенный тип QueryType.Insert), то выполняется переключатель switch, в адаптер помещается команда. А что надо сделать дальше, чтобы команда выполнилась? В MSDN я видел только параметризованные запросы, это не то, что мне нужно, т.к. в InsertCommand подставляется уже верно сформированный запрос, INSERT INTO `Table` VALUES (...), все, как положено. Осталось лишь выполнить. Пробовал _adapter.Execute..., ничего не получается, выдается исключение времени выполнения (что-то типа "Не все параметры заданы").


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Rohoss
Дата 1.8.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



А  _command.ExecuteNonQuery() использовать нельзя?


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
mr.Anderson
Дата 2.8.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Я ж говорю, летит исключение "Не все параметры заполнены".


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 2.8.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Можете привести пример работающий по вставке строки в базу Access без использования параметризованных запросов?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Выхухоль
Дата 3.8.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 9.10.2008
Где: Ташкент

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



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


Это сообщение отредактировал(а) Выхухоль - 3.8.2009, 15:44
PM MAIL ICQ   Вверх
mr.Anderson
Дата 3.8.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Получилось все. Оказалось, я просто неправильно составил запрос INSERT INTO. Как всегда, все гениальное просто  smile 

Получилось без параметров. Примерно так:
Код

OleDbCommand command = new OleDbCommand("INSERT INTO `MyTable` (`Col1`, `Col2`) VALUES ('Param1', 'Param2')", myConnection);
command.ExecuteNonQuery();

Я попросту упустил из запроса перечисление колонок, только указал имя таблицы и вставляемые значения. Вопрос решен.

Это сообщение отредактировал(а) mr.Anderson - 3.8.2009, 23:05


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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