Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Ошибка синтаксиса в инструкции Update


Автор: b3ndr 12.3.2009, 01:40
База MS Access. Есть код.
       
Код

                  vsWord wd = doc.Next();
                    //Получили слово, надо лезть в БД
                    OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT * FROM Main WHERE WORD='"+wd.ToString()+"'", thisConnection);
                    
                    OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
                    DataSet thisDataSet = new DataSet();
                    thisAdapter.Fill(thisDataSet,"Main");

                    if (thisDataSet.Tables["Main"].Rows.Count>0)
                    {
                        //есть такое
                        int a = (int) thisDataSet.Tables["Main"].Rows[0]["COUNT"];
                        a++;
                        thisDataSet.Tables["Main"].Rows[0]["COUNT"] = a;
                        thisAdapter.Update(thisDataSet, "Main");
// Здесь вызывает ошибку "Ошибка синтаксиса в инструкции UPDATE"
                    }
                    else 
                    {
                        //нет такого
                        thisDataSet.Tables["Main"].Rows.Add("aca",3);
                        //thisDataSet.Tables["Main"].Rows[thisDataSet.Tables["Main"].Rows.Count-1]["WORD"] = wd.ToString();
                        thisAdapter.Update(thisDataSet,"Main");
// Здесь вызывает ошибку "Ошибка синтаксиса в инструкции INSERT"
                    }



Почему могут возникать эти ошибки?

Автор: emmanuil 13.3.2009, 08:23
Код

OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
thisAdapter.UpdateCommand = thisBuilder.GetUpdateCommand();
thisAdapter.InsertCommand = thisBuilder.GetInsertCommand();


Автор: corpse56 26.3.2009, 17:38
та же самая проблема. причем идентичный код с компонентами для sql работает. а для Access не работает. emmanuil, Ваше решение не помогло...

Автор: emmanuil 26.3.2009, 18:20
corpse56, покажите полный код.
Предложенное решение, думаю, помогло в том примере, у Вас могут быть ошибки по другим причинам.
Кстати, b3ndr, не хорошо оставлять свой собственный вопрос без внимания!  smile 

Автор: corpse56 26.3.2009, 18:46
Разобрался! в запросах OLE имена таблиц ОБЯЗАТЕЛЬНО должны быть в квадратных скобках. OleDbCommandBuilder генерирует команды правильно, вот только квадратные скобки не ставит около имени таблицы.я написал свою UpdateCommand и все заработало.
вкратце это выглядит вот так:


Код

            OleDbDataAdapter Ole = new OleDbDataAdapter();
            Ole.SelectCommand = new OleDbCommand();
            Ole.SelectCommand.Connection = OleCon;
            Ole.SelectCommand.Connection.Open();
            Ole.SelectCommand.CommandText = "SELECT * FROM [User]";
            Ole.UpdateCommand = new OleDbCommand("update [User] set NameUser = '111111' where IDUser =3", OleCon);
            Ole.UpdateCommand.ExecuteNonQuery();

успехов!

Автор: Rififi 26.3.2009, 20:52
corpse56
имена таблиц ОБЯЗАТЕЛЬНО должны быть в квадратных скобках.
ничего подобного.
просто у тебя кривая таблица User, которая совпадает с зарезервированным словом

Автор: corpse56 27.3.2009, 10:33
и вправду!! щас пробовал на таблице Penalty - сработало без скобок. а ведь User выбирал с учетом того чтобы именно попробовать на другой таблице. я тогда подумал вдруг в таблице что-то не так. и попал опять на зарезервированное слово.
скажите, а слово Main тоже зарезервировано? изначально мне нужна таблица Main. и где посмотреть список всех зарезервированных слов для Access? ну и для MS SQL раз уж на то пошло?

Добавлено через 12 минут и 46 секунд
вот еще поправочка: поле например не может быть названо Password. это я так понял тоже зарезервированное слово. назвать его можно так, но вот потом синтаксические ошибки в запросах. изменил одну букву в названии этого поля - и все заработало. всем спасибо!

Автор: Rififi 27.3.2009, 11:25
corpse56
где посмотреть список всех зарезервированных слов для Access? 
http://lmgtfy.com/?q=microsoft+access+reserved+keywords

Автор: corpse56 27.3.2009, 11:37
спасибо. посмотрел. но в списке не оказалось слова Password...
а Main кстати незарезервированное. у меня не работало из-за Password. почему с ним не работает, но гео нет в списке зарезервированных? у меня стоит аксесс 2002 сп3. юзаю VS 2005 c#

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)