c#
  • sql
  • oracle
  • 2016-02-22 506 views -3 likes 
    -3

    此聲明有何問題?我收到錯誤 「命令不能正確地結束」:命令未正確結束

    update subjectinfo set subject_name = '" 
        + textBoxSubjectNameUpdate.Text 
        + "' , subject_abbreviation = '" 
        + textBoxSubjectAbbreviationUpdate.Text 
        + "where subject_code = '" 
        + textBoxSubjectCodeUpdate.Text + "'" 
    
    +3

    你只是在'where'之前缺少一個空格,而對於前面的Text值則是一個閉合的單引號。您還正在邀請SQL注入;請考慮使用綁定變量,而不是將用戶輸入直接放入您的語句中。 –

    +0

    除了它容易受到sql注入的事實嗎? –

    +0

    首先,使用參數化查詢。其次,如果你堅持不這樣做,至少使用參數化字符串 –

    回答

    3

    你缺少一個右單引號您textBoxSubjectAbbreviationUpdate.Text值後,再那和where之間的空間:

    update subjectinfo set subject_name = '" 
        + textBoxSubjectNameUpdate.Text 
        + "' , subject_abbreviation = '" 
        + textBoxSubjectAbbreviationUpdate.Text 
        + "' where subject_code = '" 
        + textBoxSubjectCodeUpdate.Text + "'" 
    

    你還邀請SQL注入;請考慮使用bind variables,而不是將用戶輸入直接放入您的聲明中。

    1

    在年底前 「其中」 缺少一個單引號:

    update subjectinfo set subject_name = '" 
        + textBoxSubjectNameUpdate.Text 
        + "' , subject_abbreviation = '" 
        + textBoxSubjectAbbreviationUpdate.Text 
        + "' where subject_code = '" 
        + textBoxSubjectCodeUpdate.Text + "' 
    
    +0

    是啊,我現在注意到,我不確定他是否想要「哪裏」成爲零件的插入。我現在糾正了它。謝謝! –

    +1

    最後你還留下了一個流浪的單引號。 –

    +0

    該死!多任務! :) –

    2

    + "where subject_code = '" 
    

    應該讀

    + "' where subject_code = '" 
    
    ^quote and space here 
    

    但是請使用參數。不要以這種方式構建你的SQL,這將導致成功的SQL injection攻擊。

    0

    理想情況下,您不應該在代碼中使用SQL語句來避免SQL注入。

    上面的具體情況,可以用一個StringBuilder類來寫,這個類比較乾淨,性能負擔較少。

    StringBuilder sb = new StringBuilder("update subjectinfo set subject_name = '"); 
          sb.Append(textBoxSubjectNameUpdate.Text); 
          sb.Append("' , subject_abbreviation = '"); 
          sb.Append(textBoxSubjectAbbreviationUpdate.Text); 
          sb.Append("' where subject_code = '"); 
          sb.Append(textBoxSubjectCodeUpdate.Text); 
          sb.Append("'"); 
    
    var script sb.ToString() 
    
    相關問題