问题描述
||
我在插入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 SQL Server的ives。这有什么明显的问题吗?
谢谢
解决方法
我认为\“用户\”是数据库中的保留字。尝试替换此:
INSERT INTO user (ID,FName,LName,Email) VALUES (
有了这个:
INSERT INTO [user] (ID,Email) VALUES (
(我认为它是MSSQL CE的方括号,因为它是用于其他MSSQL引擎的。)
方括号基本上告诉查询引擎,“这是数据库中对象的标识符。”它们通常用于包装包含空格的数据库对象的名称,因为否则它们将无法正确解析。但这对于保留字的对象也很有用。
, 您可能需要在用户部分周围放置方括号,如下所示:
INSERT INTO [用户]
这是因为用户可以是保留字。将[]保留在SQL中的保留字周围可以将它们用作字段和表名。
另一个要点是,您正在从某些文本输入中构建查询。这使您容易受到SQL注入攻击。为避免这种情况,我强烈建议您改用Sql Parameters来防止这种情况。看到这个链接:
http://msdn.microsoft.com/en-us/library/ff648339.aspx