неправильная синтаксическая ошибка рядом ,

Недавно я изменил свою базу данных с доступа к .mdf, и теперь у меня проблемы с работой моего кода.

Одна из проблем, с которыми я сталкиваюсь, - это ошибка «неправильный синтаксис рядом».

Я пробовал разные способы исправить это, например, ставить скобки, перемещать запятую, вставлять пробелы, убирать пробелы, но я просто не могу этого понять.

Я был бы так благодарен, если бы кто-нибудь мог мне помочь.

Мой код:

SqlStr = "INSERT INTO UserTimeStamp ('username', 'id') SELECT ('username', 'id') FROM Staff WHERE password = '" & passwordTB.Text & "'"

person KerrieJMc    schedule 19.12.2013    source источник
comment
Предполагая, что вы ищете столбцы username и id, это неправильный синтаксис SQL: "INSERT INTO UserTimeStamp (username, id) SELECT username, id FROM Staff WHERE password = '" & passwordTB.Text & "'"   -  person valverij    schedule 19.12.2013
comment
Не проблема, я добавил это как ответ.   -  person valverij    schedule 19.12.2013


Ответы (3)


Предполагая, что вы ищете столбцы имени пользователя и идентификатора, это неправильный синтаксис SQL.

Основные проблемы заключаются в том, что ваши имена столбцов заключены в одинарные кавычки и скобки в вашем выборе. Попробуйте изменить его на это:

SqlStr = "INSERT INTO UserTimeStamp (username, id) SELECT username, id FROM Staff WHERE password = '" & passwordTB.Text & "'"

Это будет отправлено в SQL следующим образом:

INSERT INTO UserTimeStamp (username, id) 
    SELECT username, id 
    FROM Staff
    WHERE password = 'some password'
person valverij    schedule 19.12.2013
comment
Этот ответ по-прежнему подвергает пользователя атаке SQL-инъекций. Я бы рекомендовал использовать метод для защиты параметра для специального запроса или использовать хранимую процедуру. - person Kyle B.; 19.12.2013
comment
По сути, пользователь отправляет команды SQL через ввод, который вставляется в ваш запрос, где вы объединяете строки (в вашем случае прямо здесь: password = '" & passwordTB.Text & "'"). Вот хорошая (но старая) статья о них и о том, как их избежать: Атаки с внедрением SQL и некоторые советы по их предотвращению. В .NET вы бы избегали их, используя SqlParameterCollection.AddWithValue - person valverij; 19.12.2013
comment
Однако я не был уверен, какой язык программирования вы используете, поэтому я пропустил этот момент. Однако если вы используете язык .NET, эта ссылка MSDN содержит несколько хороших примеров. Если нет, то вы наверняка сможете найти что-то, просто закинув название вашего языка программирования + параметризованные запросы в Google. - person valverij; 19.12.2013
comment
Да, я использую язык .Net. Спасибо, вальверий! - person KerrieJMc; 20.12.2013

Есть ряд проблем, которые я потенциально вижу.

  1. Имена столбцов не должны заключаться в кавычки, т. е. INTO UserTimeStamp('username','id') должно быть INTO UserTimeStamp(username, id)

  2. Поля столбцов, если они не являются литеральными строками, также не должны заключаться в кавычки. т. е. SELECT («имя пользователя», «id») должен быть SELECT имя пользователя, идентификатор.

  3. Вы подвергаете себя риску инъекции T-SQL, указывая свой параметр таким образом. Вам следует рассмотреть возможность использования хранимой процедуры или хорошо протестированной функции для защиты ваших параметров, если вы выполняете специальные запросы.

    SqlStr = "ВСТАВИТЬ В UserTimeStamp (имя пользователя, идентификатор) ВЫБРАТЬ имя пользователя, идентификатор ОТ персонала ГДЕ пароль = " + MyQuoteFunction (парольDB.Text);

person Kyle B.    schedule 19.12.2013

Попробуйте заключить имена столбцов в квадратные скобки следующим образом:

INSERT INTO employee ([FirstName],[LastName]) SELECT [FirstName],[LastName] FROM Employee where [id] = 1

Изменить: Также удалите круглые скобки, окружающие выбранные поля.

person adamk    schedule 19.12.2013
comment
Это не имеет абсолютно никакого отношения к предыдущему вопросу - person valverij; 19.12.2013
comment
@valverij Так и есть. Это допустимый, но специфичный для MSSQL способ цитирования идентификаторов, в отличие от одинарных кавычек в вопросе. - person ; 19.12.2013