2014-06-03 5 views
-1

во-первых, я попытался использовать следующий кодПредотвращение SQL инъекции в оракула

strQuery = @"SELECT PASSWORD FROM IBK_USERS where upper(user_id) =upper('" + UserPrefix + "')"; 

try 
{ 
    ocommand = new OracleCommand(); 
    if (db.GetConnection().State == ConnectionState.Open) 
    { 
     ocommand.CommandText = strQuery; 
     ocommand.Connection = db.GetConnection();      
     odatareader = ocommand.ExecuteReader(); 
     odatareader.Read(); 

и, наконец, я конвертированы выше запроса, чтобы предотвратить SQL инъекции, как этот

strQuery = @"SELECT PASSWORD FROM IBK_USERS where upper(user_id) =upper(:UserPrefix)"; 
try 
{ 
    ocommand = new OracleCommand(); 
    if (db.GetConnection().State == ConnectionState.Open) 
    { 
     ocommand.CommandText = strQuery; 
     ocommand.Connection = db.GetConnection(); 

     ocommand.Parameters.Add(":UserPrefix",OracleDbType.Varchar2,ParameterDirection.Input); 
     ocommand.Parameters[":UserPrefix"].Value = UserPrefix; 
     odatareader = ocommand.ExecuteReader(); 

, но это не работает

+2

Определить «не работает». Какое неожиданное поведение вы видите? Какое сообщение об ошибке? Какая трассировка стека? – beny23

+1

Это не язык программирования SQL-тегов. Фрагмент кода не является полным. –

+0

no error message –

ответ

0

Удалить двоеточие перед именем параметра. Так что вместо того, чтобы ...

ocommand.Parameters.Add(":UserPrefix", ...); 

... это сделать ...

ocommand.Parameters.Add("UserPrefix", ...); 

Ditto для установки значения параметра.


не связан с вашим вопросом: с помощью upper(user_id) в предложении WHERE может потребоваться индекс-функции для эффективной работы. Кроме того, действительно ли нужно, чтобы user_id был строкой - не можете ли вы просто сделать ее целым?

+0

я тестировал, но не работал. –

+1

Определить «не работает»? –

Смежные вопросы