IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Ошибка синтаксиса в инструкции insert into

Syntax error in INSERT INTO statement

I am trying to insert some information in an MS Access database. In my database I have the following columns and types:

The error that I get:

System.Data.OleDb.OleDbException: ‘Syntax error in INSERT INTO statement.’

I tried several posts but no post helped me. I believe there might be a problem with the autonumber column ( log_order ). Because of what I remember I don’t have to include it in the query.

PS: I know I have to pass the values as parameters.

Thank you in advance

Создан 29 июл. 17 2017-07-29 05:56:09 kdem

Try your query directly in Access and see what errors you get. I would guess maybe having quotes around the verifiedUser might cause a problem, if that’s actually a numeric field. – PhillipXT 29 июл. 17 2017-07-29 06:03:36

@marc_s please don’t do it.. I realise that many users come to SO for the quick fix their crap solution needs, but sometimes they really need to be told to start it over properly. You never know who might be writing an ecommerce solution that one day will store YOUR credit card number 😉 – Caius Jard 29 июл. 17 2017-07-29 06:10:43

3 ответа

Probably one of your variables (msg?) contains an apostrophe

The way you’ve written your SQL is a massive security risk. Please immediately look up «parameterized queries» and never, ever, ever write an sql like this again (where you use string concatenation to tack the values into the query). Your code has a proliferation of issues and using parameterized queries will solve all of them; they aren’t difficult to write

Создан 29 июл. 17 2017-07-29 05:59:01 Caius Jard

Thank for the advice. But msg variable is not the mistake. – kdem 29 июл. 17 2017-07-29 06:03:21

That entire sql is the mistake.. – Caius Jard 29 июл. 17 2017-07-29 06:04:27

It seems your data in some of the variables passed in INSERT may be causing this error. Try debugging the value in command.CommandText before executing it. If any of the variables have a single quote they must be escaped. Ref: How do I escape a single quote in SQL Server?

Also brush up on SQL Injection Ref: SQL Injection

Создан 29 июл. 17 2017-07-29 06:15:01 sosspyker

I totally agree with all that has been said, but to answer your question directly, I am pretty sure you will need to put square brackets around your field names. OleDb tends not to like special characters and could well be having a problem for example with date_ ; sending [date_] instead should get round the issue. It will not like time either. Same solution

Читать еще:  Создание теста на html

Addendum on SQL Injection

As an aside, in fact calling Access through OleDb is relatively protected from SQL Injection. This is because any attempt to execute multiple instructions in one command fails. (You get an incorrect formatted string error). So whilst you could argue that what you are doing is safe, it is not for other db providers. The sooner you get into good habits, the less likely you will be to introduce a vulnerability in a case where it could be dangerous. If it seems like you are getting a stream of abuse, it is just because everyone here wants to keep the net safe.

Создан 29 июл. 17 2017-07-29 06:20:25 Jonathan Willcock

Ошибка синтаксиса в инструкции insert into

При попытке вставить запись выдается ошибка:

Ошибка синтаксиса в инструкции INSERT INTO.

If Right$(db_file, 1) <> «» Then db_file = db_file & «»

db_file = db_file & «Dispetcherskaj.mdb»

Set conn = New ADODB.Connection

«Persist Security Info=False»

For i = 1 To SQL_Text_day

SQL_string = «INSERT INTO Gurnal (year, month, day) VALUES (» & SQL_Text_year & «,» & SQL_Text_month & «,» & i & «)»

ОтветыВсего ответов: 4
Номер ответа: 1
Автор ответа:

Вопросов: 43
Ответов: 205

Добавлено: 04.01.03 22:29
А разве можно использовать в INSERT INTO такой синтаксис. Этот способ у тебя когда-нибудь работал? или это ты впервые применяешь.


Номер ответа: 2
Автор ответа:

Вопросов: 21
Ответов: 159

Добавлено: 04.01.03 23:30
А где Ты заполняешь переменные SQL_Text_day, SQL_Text_year и SQL_Text_month? Это во-первых. Во-вторых проверь тип данных этих переменных. Если они Integer, то запись верна, а если String то нужно добавлять «‘» .Т.е. Values (‘» & SQL_Text_year & «‘,'» & SQL_Text_month & «‘,» & i & «)»


Номер ответа: 3
Автор ответа:

Вопросов: 21
Ответов: 159

Добавлено: 05.01.03 10:06
Синтаксис у Тебя вроде бы правильный. Но я не видел где Ты определяешь и заполняешь переменные SQL_Text_day, SQL_Text_month и SQL_Text_year.
поставь BreakPoint на строчку conn.Execute SQL_string и проверь какой String Ты получил. Потому, что Ты подставляешь переменные SQL_*** как Integer-ы, а в таблице поля определены тоже как Integer-ы или String-и или Date ? Ты должен заносить данные в таблицу в соответсвии с типом данных поля. Кроме того проверь нет ли у Тебя определение какого-либо поля как поля принимающего данные Unique (запрещает вносить повторно одинаковые записи) учитывая, что запись у Тебя идет в цикле может быть в этом причина?


Спасибо за советы.

Я нашел причину, она оказалесь довольно тривиальной:

у Access немного отличается язык SQL надо было

SQL_string = «INSERT INTO Gurnal ([year], [month], [day]) _

VALUES (‘» & SQL_Text_year & «‘,'» & SQL_Text_month & «‘,» & i & «)»

Тоесть имена полей таблицы поместить в [] скобки. MS хитрюга.

Всем кто будет писать запросы SQL на изменение, для Access могу посоветовать тестировать их во встроенном редакторе!

Синтаксическая ошибка в инструкции INSERT INTO Insert in Access

Я сделал проект учетных записей в c sharp с базой данных access2016, в этом я хочу ввести пользовательские данные в форму управления пользователями, когда я нажимаю на кнопку Сохранить Эта ошибка появляется

«System.Data.OleDb.OleDbException: синтаксическая ошибка в инструкции INSERT INTO» в c#.

4 Ответов

  • Вам нужно использовать параметры. Всегда указывайте тип данных и передавайте значение параметра в соответствии с хранилищем схем ( передавайте целое число как значение, если оно хранится ). Всегда указывайте длину хранилища схемы для столбца, если это применимо, как с string/varchar.
  • Вам нужно экранировать имена столбцов, чтобы использование зарезервированного слова не вызывало ошибки.
  • Вы не должны оставлять соединения открытыми, когда вы их не используете.
  • (дизайн) никогда не храните пароли в виде обычного текста.
  • Для инструкции insert нет необходимости использовать адаптер данных, используйте непосредственно объект command.

Для Microsoft Access параметры являются позиционными и не именованными, следует использовать символ ? в качестве заполнителя, хотя код будет работать, если вы используете параметры name, если они находятся в том же порядке.

Смотрите документацию для [OleDbCommand.Parameters Property][1]


Поставщик OLE DB .NET не поддерживает именованные параметры для передачи параметров в оператор SQL или хранимую процедуру, вызываемую параметром OleDbCommand, если параметр CommandType имеет значение Text. В этом случае вопросительный знак (?) необходимо использовать заполнитель. Например:

Поэтому порядок, в котором объекты OleDbParameter добавляются к OleDbParameterCollection, должен непосредственно соответствовать положению вопросительного знака-заполнителя для параметра в тексте команды.

Обязательно укажите ожидаемый тип схемы, где будет использоваться параметр AND длина схемы, если это применимо.

Я также рекомендую вам всегда использовать операторы using вокруг ваших экземпляров, где тип реализует IDisposable , как OleDbConnection , так что соединение всегда закрывается, даже если в коде возникает исключение.

Измененный код: я догадался о типах данных и длине, вы должны исправить их на основе схемы

Вы пропустили одну цитату вокруг некоторых из ваших текстовых полей, таких как txtUserCode и . это должно быть ‘» + txtUserCode + «‘ . Однако вы всегда должны использовать параметризованные запросы , чтобы избежать внедрения SQL. Ваш код должен быть примерно таким:

Хотя указать тип напрямую и использовать свойство Value лучше, чем AddWithValue .

В вашем коде есть ошибка форматирования, которую следует исправить, если она совпадает с вашим реальным кодом :

в ваших текстовых полях вам нужно добавить одну кавычку вокруг вашего txtUserCode , как это, или он не будет зарегистрирован как целый параметр

И вы действительно не должны помещать свои данные непосредственно в ваш запрос, потому что это может привести к проблеме безопасности и людям, вводящим sql в него. Попробуйте вместо этого использовать параметризованные запросы, когда possible.Here-это какая-то причина.

Пароль -это зарезервированное слово в Access SQL, поэтому используйте [Password] в своей строке.

Похожие вопросы:

У меня есть команда SQL Insert Into, которая работает в нормальных условиях. Это означает, что если я заполняю каждый textbox, то данные отправляются в БД (Acces db). Но когда я ‘forget’ 1 textbox.

кто-нибудь может мне помочь, что не так с моим кодом? Он всегда говорит: синтаксическая ошибка в инструкции INSERT INTO. try < OleDbConnection Con = new.

Я пытаюсь вставить некоторую информацию в базу данных MS Access. В моей базе данных у меня есть следующие столбцы и типы: log_order — Autonumber (I need this to keep the order where inserted in the.

У меня есть сообщение об ошибке: System.Data.OleDb.OleDbException: ‘синтаксическая ошибка в инструкции INSERT INTO.’ Я прочитал множество подобных вопросов , но ни один из их ответов не помог мне.

Синтаксическая ошибка в инструкции insert into происходит, когда я пытаюсь обновить свою базу данных MS Access. Имя базы данных = студент Имя таблицы = таблица учащихся Код: private void.

Я ничего не понимаю. Что не так с этим запросом While _drRemoteData.Read Dim _Query As String = insert into SchedularTicketsData (RemoteDBID,key,Transno,DateEntered,DateUpdated) values ( &.

Я впервые создал таблицу в Access ее имя punchMachineData он имеет следующие столбцы с их соответствующими типами, указанными на ссылке я создаю динамический запрос вставки.

Я новичок в году У меня есть следующая ошибка при выполнении инструкции Insert-Statement syntax error in INSERT INTO statement Вот мой код: Private Sub cmdadd_Click(ByVal sender As.

Привет я создаю базовую форму в Visual Studio 2012 Express. Я использую Microsoft Access 2012 в качестве базы данных. Моя проблема в том, что когда я нажимаю кнопку отправки, ничего не происходит.

Ссылка на основную публикацию
Номер ответа: 4
Автор ответа:

Вопросов: 5
Ответов: 2

Добавлено: 05.01.03 19:51