#c# #sql-server #sql-server-ce
#c# #sql-server #sql-server-ce
Вопрос:
У меня проблема со вставкой в базу данных MSSQL CE,
locCon.Open();
SqlCeCommand locCmd = locCon.CreateCommand();
locCmd.CommandText = "INSERT INTO user (ID,FName,LName,Email) VALUES('" this.id "','" this.fName "', '" this.lName "','" this.email "')";
locCmd.ExecuteNonQuery();
При запуске этого я получаю
Произошла ошибка при разборе запроса. [Номер строки токена = 1, смещение строки токена = 13, ошибка токена = пользователь]
Теперь я не вижу ничего неправильного в запросе, хотя это первый раз, когда я использую MS SQL из примеров, я видел, что синтаксис для mysql и msssql в любом случае идентичен для вставок. Есть ли что-то явно неправильное в этом?
Спасибо
Ответ №1:
Я думаю, что «пользователь» — это зарезервированное слово в базе данных. Попробуйте заменить это:
INSERT INTO user (ID,FName,LName,Email) VALUES (
с помощью этого:
INSERT INTO [user] (ID,FName,LName,Email) VALUES (
(Я думаю, что это квадратные скобки для MSSQL CE, поскольку это для других движков MSSQL.)
Квадратные скобки в основном сообщают механизму запросов: «Это идентификатор объекта в базе данных». Обычно они используются для переноса имен объектов базы данных, содержащих пробелы, поскольку в противном случае они не были бы проанализированы корректно. Но это также полезно для объектов, которые являются зарезервированными словами.
Комментарии:
1. привязка к изображениям и ответам 🙂
Ответ №2:
Возможно, вам придется заключить пользовательскую часть в квадратные скобки следующим образом:
ВСТАВИТЬ В [user]
это потому, что user может быть зарезервированным словом. добавление [] вокруг зарезервированных слов в SQL позволяет использовать их в качестве имен полей и таблиц.
Еще один важный момент заключается в том, что вы создаете свой запрос на основе некоторых текстовых вводимых данных. Это подвергает вас атакам с использованием SQL-инъекций. Чтобы избежать этого, я бы настоятельно рекомендовал вам использовать вместо этого параметры Sql, которые помогают предотвратить это. Смотрите эту ссылку:
Комментарии:
1. Вы оба правы, но Дэвид был первым, спасибо за быстрый ответ