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

    它不工作,因爲每當我更新任何列它使其他列NULL。如何在數據庫的其他列無干擾地更新特定列?

    +4

    您有一個SQL注入漏洞。 – SLaks

    +5

    如果您不想設置其他列,請不要設置其他列。 – SLaks

    回答

    0

    一個顯而易見的解決方案是用列表構造update

    另一種方法是使用coalesce()

    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 + " ' 
    

    其實,你應該使用的參數,而不是在查詢字符串直接把值。直接放入參數會使系統容易受到SQL注入的影響。

    這就是說,我不知道你是如何得到NULL值。您可能確實想要:

    update Medicine 
        set Name =(case when ' " + textbox1.Text + " ' = '' then '" + textbox1.Text + "' else Name end), 
         . . . 
    
    相關問題