c#
  • sql
  • db2
  • odbc
  • 2016-11-25 50 views 0 likes 
    0

    所以,我試圖改變我的程序的設計,以防止SQL注入,看到老SQL字符串是如何通過預設的字符串串聯文本框製成。C# - ODBC參數演戲

    我使用的ODBC驅動程序在DB2數據庫。

    事情是,它工作在某些情況下,在別人少了點。

    讓我給你舉個例子:

    舊代碼:

    App.Comando.CommandText = "SELECT NOMUSU, CodEmp FROM DB.Users WHERE CODUSU = '" + txt_usuario.Text + "' AND PASUSU = '" + txt_password.Password + "'"; 
    

    新代碼:

    App.Comando.CommandText = 
          "SELECT NOMUSU, CodEmp FROM DB.Users WHERE CODUSU = ? AND PASUSU = ?"; 
         App.Comando.Parameters.AddWithValue("@codusu", txt_usuario.Text); 
         App.Comando.Parameters.AddWithValue("@pass", txt_password.Password); 
    

    這一個完美的作品。

    然而,這一次,沒有。不會拋出任何錯誤,只是回來看似空洞。

    舊代碼:

    App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = '" + marca + "'"; 
    

    新代碼:

    App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = ?"; 
    App.Comando.Parameters.AddWithValue("@marca", marca); 
    

    就在你需要它時,

    string marca = txt_marca.Text.Trim().ToUpper(); 
    

    在這種情況下,新的代碼不能正常工作,舊的那個。我一直在拉我的頭髮,這沒有意義。

    謝謝你的時間!

    +0

    'App.Comando.Parameters.AddWithValue(「@ desmar」,marca);'? – artm

    +0

    @artm是的,marca事先被定義爲文本框的修剪後的toupper文本。應該提到 –

    +0

    我想在'AddWithValue'中使用'@ desmar'而不是'@ marca' – artm

    回答

    0

    有你的一套命令的類型?

    App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = ?"; 
    App.Comando.Parameters.AddWithValue("?marca", marca); 
    
    +0

    第一個不會改變任何東西,第二個會給我一個ODBC異常,因爲ODBC不接受文本命令中的命名參數,僅在存儲過程中。不過謝謝你。 –

    +0

    我修改了我的回覆。 – Esperento57

    +0

    這不是一個存儲過程。存儲過程存儲在數據庫中,可以從代碼中調用。 –

    相關問題