2014-02-16 4 views
-3
String start_cd; 
    String end_cd; 
    int time_start_int; 
    int time_end_int; 
    opencon(); 

    SqlCommand res = new SqlCommand("SELECT ID,Available,Type," + start_cd + "," + end_cd + " FROM " + going + " WHERE " + start_cd + "!=0 or " + end_cd + "!=0 and " + start_cd + " >= " + time_start_int + " and " + start_cd + " <= " + time_end_int + "", con); 
    SqlDataAdapter sda_res = new SqlDataAdapter(res); 
    DataTable dt_res = new DataTable(); 
    sda_res.Fill(dt_res); 

    listBox1.DataSource=dt_res; 
    listBox1.DisplayMember="ID"; 

    listBox2.DataSource = dt_res; 
    listBox2.DisplayMember = start_cd; 

я не получаю никаких ошибок но ListBox показать отфильтрованные значения (я хочу адресность значения time_start_int между time_end_int)C# между в котором условие не работает

+8

Люди уже говорили вам в вашем предыдущем вопросе, вы объединяете строки для создания запросов, старомодные и рискованные. – Itay

+1

Даже если вы настаиваете на написании кода при проблемах с SQL-инъекциями, уделите время и отредактируйте свой образец, чтобы не было необходимости прокрутки (излишне сложно прокрутить образец, чтобы попытаться угадать, что не так). –

ответ

-1
SqlCommand res = new SqlCommand("SELECT ID,Available,Type,"'+ start_cd +'","' + 
     end_cd +'" FROM going 
     WHERE "'+ start_cd +'"!=0 or "'+ end_cd +'"!=0 and " + 
     time_start_int + " <= "'+ start_cd +'" <= " + time_end_int + "", con); 

Вы пропустили '(одинарная кавычка) для строковых переменных.

0

Вам нужно сравнить time_start_int и time_end_int с start_cd в отдельных выражениях, как этот

SqlCommand res = new SqlCommand("SELECT ID,Available,Type," + start_cd + "," + 
    end_cd + " FROM " + going + 
    " WHERE " + start_cd + "!=0 or " + end_cd + "!=0 and " + 
    time_start_int + " <= " + start_cd + " and " + 
    start_cd + " <= " + time_end_int + "", 
    con); 

Имейте в виду, что использование строки для конкатенации SQL заявления сделать ваш код уязвимым для атак с внедрением SQL. Вы можете обратиться к Algorithm to avoid SQL injection on MSSQL Server from C# code?, чтобы узнать, как избежать атак SQL-инъекций.

0

Прежде всего я использовать круглые скобки для or, потому что and вычислит первый и, возможно, это может вызвать, чтобы удалить все фильтры и во второй части я пишу time_start_int + " <= " + start_cd + " and " + start_cd + " <= " + time_end_int потому что нам нужно start_cd быть между time_start_int и time_end_int:

SqlCommand res = new SqlCommand("SELECT ID,Available,Type," + start_cd + "," + 
    end_cd + " FROM " + going + 
    " WHERE (" + start_cd + "!=0 or " + end_cd + "!=0) and " + 
    time_start_int + " <= " + start_cd + " and " + start_cd + " <= " + time_end_int + "", con); 
+1

+0: хотя может быть и правильно, нет никаких объяснений, что вы сделали и что еще более важно, почему. –

+0

Я получил ошибку Неправильный синтаксис рядом с «FOT». (FOT = start_cd) – sudhara

+0

Я надеюсь, что изменения дадут вам некоторые подсказки тому, что я делаю. – Hamidreza

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