Используя MSSQL CE в C #, получаю ошибку, и не могу понять, почему, - PullRequest
2 голосов
/ 11 июня 2011

У меня проблема со вставкой в ​​базу данных 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 в любом случае идентичен для вставок. Что-то явно не так с этим?

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 июня 2011

Возможно, вам придется заключить скобки в пользовательскую часть следующим образом:

INSERT INTO [пользователь]

это потому, что пользователь может быть зарезервированным словом. размещение [] вокруг зарезервированных слов в SQL позволяет использовать их в качестве имен полей и таблиц.

Еще одним важным моментом является то, что вы строите свой запрос из некоторых текстовых вводов. Это подвергает вас атакам SQL-инъекций. Чтобы избежать этого, я настоятельно рекомендую вместо этого использовать параметры Sql, которые помогут предотвратить это. Смотрите эту ссылку:

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

3 голосов
/ 11 июня 2011

Я думаю, что «пользователь» - зарезервированное слово в базе данных. Попробуйте заменить это:

INSERT INTO user (ID,FName,LName,Email) VALUES (

с этим:

INSERT INTO [user] (ID,FName,LName,Email) VALUES (

(я думаю, что это 'квадратные скобки для MSSQL CE, поскольку это для других механизмов MSSQL.)

Квадратные скобки в основном говорят обработчику запросов: «Это идентификатор объекта в базе данных». Они обычно используются для переноса имен объектов базы данных, которые содержат пробелы, поскольку в противном случае они не будут анализироваться правильно. Но это также полезно для объектов, которые являются зарезервированными словами.

...