c#
  • sql-server
  • 2016-07-31 4 views 0 likes 
    0
    ("update Medicine set Name = ' " + textbox1.Text + " ', Company = ' " + textbox2.Text + " ', Type = ' " + textbox3.Text + " ', Quantity = ' " + textbox4.Text + " ' where P_id =' " + textbox5.Text + " ' "); 
    

    Es funktioniert nicht, denn wenn ich irgendeine Spalte aktualisiere, macht es andere Spalten NULL.Wie aktualisiert man eine bestimmte Spalte ohne Störung in anderen Spalten in der Datenbank?

    +4

    Sie haben eine SQL-Injection-Sicherheitslücke. – SLaks

    +5

    Wenn Sie keine anderen Spalten festlegen möchten, legen Sie die anderen Spalten nicht fest. – SLaks

    Antwort

    0

    Eine naheliegende Lösung ist die update mit Spaltenlisten zu konstruieren.

    Eine Alternative ist coalesce() zu verwenden:

    update Medicine 
        set Name = coalesce(' " + textbox1.Text + " ', Name), 
         Company = coalesce(' " + textbox2.Text + " ', Company), 
         Type = coalesce(' " + textbox3.Text + " ', Type, 
         Quantity = coalesce(' " + textbox4.Text + " ', Quantity) 
    where P_id =' " + textbox5.Text + " ' 
    

    Eigentlich sollten Sie Parameter verwenden, anstatt direkt Werte in die Query-String setzen. Durch das direkte Einfügen von Parametern wird das System für SQL-Injection anfällig.

    Das sagte, ich bin mir nicht sicher, wie Sie NULL Werte erhalten. Sie könnten wirklich wollen:

    update Medicine 
        set Name =(case when ' " + textbox1.Text + " ' = '' then '" + textbox1.Text + "' else Name end), 
         . . . 
    
    Verwandte Themen