SQLインジェクションを防止するために、私のプログラムのデザインを変更しようとしています。プリセット文字列とTextBoxesを連結することによって、どのような古いSQL文字列が作られたかを見ています。C# - ODBCパラメータの動作
DB2データベースでODBCドライバを使用しています。
これは、場合によっては機能しますが、それ以外の場合は機能しません。
例を挙げましょう:
旧コード:
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);
この1つは完璧に動作します。
ただし、これはありません。何もエラーを投げていない、ちょうど空白に戻ってきます。
旧コード:
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();
、新しいコードは動作しません、古いものがやった。私は私の髪を引き出している、それはちょうど意味がありません。
ありがとうございました!
'App.Comando.Parameters.AddWithValue(" @ desmar "、marca);'? – artm
@artmはい、marcaは、あらかじめテキストボックスのトリムされたテキストとして定義されています。 –
私は 'AddWithValue'の中で' @ marca'の代わりに '@ desmar'を使うつもりでした。 – artm