附近有语法错误 'P'
问题描述:
错误:附近有语法错误 'P'
*Microsoft OLE DB Provider for SQL Server error '80040e14'
Incorrect syntax near 'p'.
/TEST/order.asp, line 105*
行105:
*Set rs = conn.Execute("INSERT INTO orders (OrderNumber,Items,DateT,Valuex,Name,Address,Email,Instructions,Terms,CountryFlag,Newsletter) VALUES ('"&OrderNumber&"','"&Items&"','"&DateT&"','"&Valuex&"','"&Name&"','"&Address&"','"&Email&"','"&Instructions&"','"&Terms&"','"&CountryFlag&"','"&Newsletter&"')")*
这工作对我们目前的网站完美的罚款,但没有对reskinned版本。我假设它是在前一页的会话变量必须搞砸的错误?
答
如果将其转换为存储过程,这将是最简单的方法。
但是,对于您当前的情况,可能更容易创建命令对象并将值解析为参数。
Dim sqlstring As String = "INSERT INTO orders (OrderNumber, Items, DateT, Valuex, Name, Address, Email, Instructions, Terms, CountryFlag, Newsletter) " _
+ "VALUES('@OrderNumber', '@Items', '@DateT', '@Valuex', '@Name', '@Address', '@Email', '@Instructions', @Terms', '@CountryFlag', '@Newsletter')"
Dim comm As New SqlCommand(sqlstring, conn)
comm.Parameters.Add(New SqlParameter("@OrderNumber", OrderNumber))
comm.Parameters.Add(New SqlParameter("@Items", Items))
comm.Parameters.Add(New SqlParameter("@DateT", DateT))
comm.Parameters.Add(New SqlParameter("@Valuex", Valuex))
comm.Parameters.Add(New SqlParameter("@Name", Name))
comm.Parameters.Add(New SqlParameter("@Address", Address))
comm.Parameters.Add(New SqlParameter("@Email", Email))
comm.Parameters.Add(New SqlParameter("@Instructions", Instructions))
comm.Parameters.Add(New SqlParameter("@Terms", Terms))
comm.Parameters.Add(New SqlParameter("@CountryFlag", CountryFlag))
comm.Parameters.Add(New SqlParameter("@Newsletter", Newsletter))
conn.Execute()
你可能在这些值中有一个'''。你想使用参数化查询。 – Win
请仔细阅读关于sql注入的信息,因为这对它是危险的,它可能也会解决这个问题。 – DavidG
由于你不控制你的SQL查询,你的语法错误可能在任何地方。使用查询参数代替这个动态字符串连接,这样你实际上控制了查询的语法。而且,作为额外的奖励,您不再将用户输入视为*可执行代码*。 – David