2015-10-01 2 views
1

У меня есть этот код, который отлично работает, но только проблема заключается в том, что при вводе имени пользователя или пароля, который не существует в базе данных, этот код по-прежнему отображает сообщение «пароль изменен успешно», без каких-либо изменение сообщения db или ошибки. Я хочу знать способ справиться с этим. Есть ли способ отобразить сообщение, когда WHERE условие терпит неудачу?Заявление о текущем состоянии Условие Fail

Try 
     If txtBoxSettingNewPassword.Text = txtBoxSettingConfPassword.Text Then 
      con.Open() 
      cmd.Connection = con 
      cmd.CommandType = System.Data.CommandType.Text 
      cmd.CommandText = ("UPDATE [User] " & _ 
      "SET password = '" & (txtBoxSettingNewPassword.Text) & "'" & _ 
      "WHERE user_name ='" & (txtBoxSettingUserName.Text) & "'" & " and password = '" & (txtBoxSettingOldPassword.Text) & "';") 
      cmd.ExecuteNonQuery() 
      MessageBox.Show("password changed successfully") 
     Else 
      MessageBox.Show("Passwords do not match") 
     End If 
    Catch ex As Exception 
     MessageBox.Show("Something went wrong," & ex.Message) 
    Finally 
     con.Close() 
    End Try 

Заранее спасибо

+0

int rowsAffected = cmd.ExecuteNonQuery(); ----- затем проверьте значение rowsaffected –

+1

Ваш код широко открыт для SQL Injection. Используйте хранимую процедуру как переход между ними. Затем ваша хранимая процедура может быть сделана для исключения исключения, когда что-то не так. –

ответ

2

Вам нужно переместить

MessageBox.Show("password changed successfully") 

вне блока, если в каждый раз, когда вы делаете обновление, является ли оно успешным или нет, будет отображаться сообщение так как нет кода для проверки, если он будет успешным или нет.

Вы можете попробовать так:

cmd = New OleDbCommand("update .....", cn) 
rowCount = cmd.ExecuteNonQuery() 
If rowCount < 1 Then 
MessageBox.Show("password changed successfully") 

На стороне записки:

Ваш код открыт для SQL Injection. Чтобы избежать этого, вам нужно использовать параметризованный запрос.

0

Команда обновления SQL не является ошибкой, если не найдена совпадение.

Ваш вызов ExecuteNonQuery имеет возвращаемое значение, которое вы можете назначить целому числу. например

numRows = cmd.ExecuteNonQuery() 

Если это значение равно нулю, вы не нашли соответствия, поэтому вы должны сообщить об ошибке.

0

Я бы сделал здесь немного защитного кодирования и проверял, существует ли пользователь, прежде чем запускать обновление, а не полагаться на улов. Это не так эффективно, потому что есть две поездки по базам данных.

Оставьте попытку/уловить непредвиденные ошибки ... не те, которые, как вы знаете, могут возникнуть.

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