c#
  • sql-server
  • 2016-07-31 2 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), 
         . . . 
    
    관련 문제