При использовании MSSQL CE в C # возникает ошибка, и мы не можем понять, почему,

#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, которые помогают предотвратить это. Смотрите эту ссылку:

http://msdn.microsoft.com/en-us/library/ff648339.aspx

Комментарии:

1. Вы оба правы, но Дэвид был первым, спасибо за быстрый ответ