Проблема с MySQL C#

233
12 июля 2017, 22:23

Почему появляется исключение при изменении пароля, но пароль в базе данных меняется.

Код:

private void button1_Click(object sender, EventArgs e)
{
    string connect = "server=localhost;username=root;database=users;password=;";
    MySqlConnection connection = new MySqlConnection(connect);
    connection.Open();
    string zapros = "SELECT email FROM users.data WHERE email='" + textBox1.Text + "'";
    string updatepassword = "UPDATE `users`.`data` SET `password`='1122334455' WHERE `email`='" + textBox1.Text + "';";
    MySqlCommand command = new MySqlCommand(zapros, connection);
    MySqlCommand command1 = new MySqlCommand(updatepassword, connection);
    try
    {
        string resul = command.ExecuteScalar().ToString();
        string updpass = command1.ExecuteScalar().ToString();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Такого нет!");
    }
}

resul отвечает за проверку пользователя в базе данных. updpass отвечает за смену пароля, если пользователь присутствует.

Answer 1

Ошибка возникает из-за того, что вы пытаетесь получить результат и выполнить update-запрос с помощью ExecuteScalar, но при этом запрос на обновление данных не возвращает ничего. Для вставки, удаления и обновления данных исползуйте методв ExecuteNonQuery:

command1.ExecuteNonQuery()

В случае ошибки выполнения запроса будет выброшено соответствующее исключение класса MySqlException (или, возможно, его наследника).
В данном же случае, вы отсутствующий результат пытаетесь привести к строке, используя toString, и получаете исключение, в виду отсутствия самого результата. А поскольку отлавливаете вы самый верхний класс исключений Exception и не выводите сообщение об ошибке, возникают сложности с отладкой кода.

В дополнение отмечу, что подстановка параметров напрямую в запрос - плохая практика. Используете параметры для передачи значений в запрос.

string updatepassword = "UPDATE `users`.`data` SET `password`='1122334455' WHERE `email`= @email;";
MySqlCommand command1 = new MySqlCommand(updatepassword, connection);
command1.Parameters.AddWithValue("@email", textBox1.Text);
try {
     command1.ExecuteNonQuery();
}
catch(MySqlException ex){
    // ошибка работы с БД
}
catch(Exception ex){
    //прочие возможные ошибки
} 

зы: когда вы говорите, что выбрасывается исключение, но при этом пароль меняется, это означает единственное - что ошибка возникает уже после выполнения запроса. А после запроса у вас имеется только вызов .toString, где наиболее вероятно, что результат запроса null

READ ALSO
Определение dns адресов у proxy c#

Определение dns адресов у proxy c#

Можно ли получить список dns proxy не используя при этом браузер ? Желательно средствами c#?

284
Как отлаживать JS в VS2017?

Как отлаживать JS в VS2017?

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

172
Как узнать доступен ли файл для открытия и записи?

Как узнать доступен ли файл для открытия и записи?

Есть папка в сети, в которой периодически создаются файлыЕсть необходимость копировать данные файлы в другой каталог

221
Как добавить текст под изображение?

Как добавить текст под изображение?

Нужно реализовать что то типо этого:

165