2016-10-10 39 views
-1

錯誤:附近有語法錯誤 '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

回答

0

如果將其轉換爲存儲過程,這將是最簡單的方法。

但是,對於您當前的情況,可能更容易創建命令對象並將值解析爲參數。

 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