2013-10-08 2 views
0

Я пытаюсь сказать: если идентификатор в текстовом поле1 существует в таблице sql, тогда отобразите сообщение. иначе перейдите к следующей странице., если существует идентификатор в таблице.

private void btCode_Click(object sender, RoutedEventArgs e) 
{ 
    sc.Open(); 
    SqlDataReader reader = null; 

    string rwID = txtID.Text; 
    SqlCommand cmd = new SqlCommand("select ID from Table where @rwID='" + txtID.Text + "'", sc); 
    cmd.Parameters.AddWithValue("@rwID", txtID.Text); 
    reader = cmd.ExecuteReader(); 

    if (reader != null && reader.HasRows) 
    { 
    CodeView w = new CodeView(cbRe.Text, txtID.Text); 
    w.Show(); 
    } 
    else 
    { 
    MessageBox.Show("Already Assigned"); 
    } 

    sc.Close(); 
} 
+0

В чем проблема с кодом? –

ответ

2

Ваша настоящая проблема в вашей команде sql и использовании параметризованного sql.

Измените свой @rwID на имя вашего реального столбца. И узнайте, как работает синтаксис parameterized queries.

Использовать ExecuteNonQuery вместо ExecuteReader.

Выполняет Transact-SQL заявление против соединения и возвращает количество затронутых строк.

SqlCommand cmd = new SqlCommand("select ID from Table where rwID = @rwID", sc); 
cmd.Parameters.AddWithValue("@rwID", txtID.Text); 

int rows = cmd.ExecuteNonQuery(); 
if(rows > 0) 
{ 
    //Exist in database 
} 
else 
{ 
    //Doesn't exist in database 
} 

Я предположить ваше реальное имя столбца rwID.

+0

ОК, я получаю уже назначенное сообщение, даже если идентификатор отсутствует в таблице. – user2631662

+0

@ user2631662 Разве это не нормально? Если вы поместите это сообщение в _else_ part в моем коде, это означает, что сообщение видит только тогда, когда этот _ID_ не принадлежит вашей таблице. –

+0

да, но я получаю сообщение, когда ID находится в таблице – user2631662

1

Предположим, что значение txtID.Text - это строка «3».

После

SqlCommand cmd = new SqlCommand("select ID from Table where @rwID='" + txtID.Text + "'", sc); 

Значение текста команды является

"select ID from Table where @rwID='3'" 

После этого вы установите значение параметра "3" с

cmd.Parameters.AddWithValue("@rwID", txtID.Text); 

эффективно получение

"select ID from Table where '3'='3'" 

, который является истинным для каждой строки, если есть строки вообще. Вобще:

SqlCommand cmd = new SqlCommand("select ID from Table where ID = @rwID", sc); 
cmd.Parameters.AddWithValue("@rwID", txtID.Text); 
0

изменить строку

SqlCommand cmd = new SqlCommand("select ID from Table where @rwID='" + txtID.Text + "'", sc); 

в

SqlCommand cmd = new SqlCommand("select ID from Table where [email protected]", sc); 
Смежные вопросы