附近有语法错误 '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版本。我假设它是在前一页的会话变量必须搞砸的错误?

+0

你可能在这些值中有一个'''。你想使用参数化查询。 – Win

+1

请仔细阅读关于sql注入的信息,因为这对它是危险的,它可能也会解决这个问题。 – DavidG

+2

由于你不控制你的SQL查询,你的语法错误可能在任何地方。使用查询参数代替这个动态字符串连接,这样你实际上控制了查询的语法。而且,作为额外的奖励,您不再将用户输入视为*可执行代码*。 – David

如果将其转换为存储过程,这将是最简单的方法。

但是,对于您当前的情况,可能更容易创建命令对象并将值解析为参数。

 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() 
+0

请解释为什么这将是一个存储过程的“最简单”?您添加的代码也不太正确。 – DavidG

+0

重新看看你已经把所有参数放在''''中的查询 – GauravKP