2016-04-18 4 views
0

Ich versuche, ein einfaches Einfügen oder Aktualisieren in SQL Server als NULL, nicht leer. Ich habe viele Online-Referenzen gesehen, um Field = NULL ohne Anführungszeichen zu setzen, aber es erscheint immer noch leer, nicht NULL. Unglaublich frustrierend.NULL-Wert in SQL Server von Classic ASP einfügen

Dies ist in klassischen Asp.

If Request.Form("Field") = "" or IsNull(Request.Form("Field")) then 
    Field = NULL 
Else 
    Field = Request.Form("Field") 
End If 

sSql="UPDATE [table] SET timestamp = {fn NOW()}," &_ 
    "Field = '" & Field & "'," &_ 
    "WHERE [System] = '" & System & "' and Active = '1'" 

Wenn ich dies tun, beweist es, dass es überprüft wird, weil es in einem ich schon versucht, diese 1.

If Request.Form("Field") = "" or IsNull(Request.Form("Field")) then 
    Field = 1 
Else 
    Field = Request.Form("Field") 
End If 

sSql="UPDATE [table] SET timestamp = {fn NOW()}," &_ 
"Field = '" & Field & "'," &_ 
"WHERE [System] = '" & System & "' and Active = '1'" 

setzt aber einen Fehler 500 erhalten:

sSql="UPDATE [Table] SET timestamp = {fn NOW()}, Field = " 
If IsNull(Field) Then 
    sSQL = sSQL & "NULL" 
Else 
    sSQL = sSQL & "'" & Field & "'" &_ 
End If 
"NTLogon = '" & UCase(NTLogon) & "'" &_ 
"WHERE [System] = '" & System & "' and Active = '1'" 

Als ich versuchen Sie dies anstelle meines ursprünglichen Codes: Feldzuweisung:

Field = "NULL" and Field = "'" & Request.Form("Field") & "'" 

sSQL: "Ein Fehler auf dem Server aufgetreten ist, wenn die URL der Verarbeitung"

"Field = " & Field & "," &_ 

ich

+1

Bevor Sie etwas anderes tun, müssen Sie über parametrisierte Abfragen lesen, verstehen und starten. Dies ist ein Lehrbuchbeispiel für die SQL-Injektion. –

+0

Stellen Sie sicher, dass Ihre Tabelle keinen Standardwert für diese Spalte hat. Dann setzen Sie einfach 'Field =" NULL "' und 'Field =" '"& Request.Form (" Feld ") &"' "' und Ändern Sie sql in '" Feld = "& Feld &", "& _' dann erkennen Sie, dass Sie parametrisierte Abfragen verwenden und alles wieder ändern sollten – JamieD77

Antwort

1

Also yeah, schreiben Sie hier über parametrisierte Abfragen, bla bla bla ... jetzt das ist aus jedem System, könnten wir vielleicht auf die eigentliche Frage schauen?

Das Problem ist folgendes:

"Field = '" & Field & "'" 

Diese Et-Zeichen sind Ihre liebevoll bevölkerten vbScript NULL Wert gleich wieder in einen String zu konvertieren. Wenn Sie das nicht möchten, müssen Sie den Fall IsNull explizit behandeln.

sSQL = "UPDATE [table] SET timestamp = {fn NOW()}, Field = " 
If IsNull(Field) Then 
    sSQL = sSQL & "NULL" 
Else 
    sSQL = sSQL & "'" & Field & "'" 
End If 
sSQL = sSQL & " WHERE [System] = '" & System & "' AND Active = '1'" 

Beachten Sie, dass, auch wenn Sie dies über eine parametrisierte Abfrage zu tun, müssen Sie Sie sicherstellen, sind nicht Ihre vbScript NULL Wert auf eine Zeichenfolge anhängt, weil "" & NULL = "".