2016-10-10 5 views
-1

Fehler:falsche Syntax in der Nähe von 'p'

*Microsoft OLE DB Provider for SQL Server error '80040e14' 
Incorrect syntax near 'p'. 
/TEST/order.asp, line 105* 

Linie 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&"')")* 

Dieses völlig in Ordnung, auf unserer aktuellen Website funktioniert aber nicht auf der reskinned Version. Ich nehme an, dass es auf einem Fehler auf einer vorherigen Seite, wo die Session-Variablen durcheinander gebracht werden müssen, ist?

+0

Sie könnten '' 'in einem dieser Wert haben. Sie möchten die parametrisierte Abfrage verwenden. – Win

+1

Bitte gehen Sie und lesen Sie über SQL-Injektion, da dies gefährlich offen ist, wird es wahrscheinlich auch das Problem beheben. – DavidG

+2

Da Sie Ihre SQL-Abfrage nicht steuern, könnte der Syntaxfehler irgendwo liegen. Verwenden Sie anstelle dieser dynamischen String-Verkettung Abfrageparameter, damit steuern Sie tatsächlich die Syntax der Abfrage. Und als zusätzlichen Bonus würden Sie aufhören, Benutzereingaben als * ausführbaren Code * zu behandeln. – David

Antwort

0

Dies wäre am einfachsten, wenn Sie es in eine gespeicherte Prozedur konvertiert.

Für Ihre aktuelle Situation ist es jedoch wahrscheinlich einfacher, ein Befehlsobjekt zu erstellen und die Werte als Parameter zu analysieren.

 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

Bitte erklären Sie, warum dies "einfachste" ass eine gespeicherte Prozedur wäre? Der Code, den Sie hinzugefügt haben, ist auch nicht ganz richtig. – DavidG

+0

Schauen Sie sich die Abfrage an, in die Sie alle Parameter in '''' geschrieben haben – GauravKP

Verwandte Themen