Задать вопрос
serega404
@serega404

Как исправить исключение при не найденом значении в MySQL в C#?

Имеется вот такой код:
string login = "serega404"; // если в базе нет этого ника то мы получаем исключение
           string CommandText = "SELECT money FROM  users WHERE login = '" + login + "'";
            string Connect = "Database=bd;Data Source=localhost;User Id=root;Password=;SslMode=none";
            MySqlConnection myConnection = new MySqlConnection(Connect);
            MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection);
            myConnection.Open(); 
            string money = myCommand.ExecuteScalar().ToString();
            myConnection.Close();
            return money;
  • Вопрос задан
  • 169 просмотров
Подписаться Простой Комментировать
Решения вопроса 2
borisdenis
@borisdenis
Ленив и вреден...
Ну так используйте try...catch...finally, примерно так

try
    {
        string login = "serega404"; // если в базе нет этого ника то мы получаем исключение
           string CommandText = "SELECT money FROM  users WHERE login = '" + login + "'";
            string Connect = "Database=bd;Data Source=localhost;User Id=root;Password=;SslMode=none";
            MySqlConnection myConnection = new MySqlConnection(Connect);
            MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection);
            myConnection.Open(); 
            string money = myCommand.ExecuteScalar().ToString();
            myConnection.Close();
            return money;
    }
    catch (Exception ex)
    {
        Console.WriteLine("Ахтунг, нету такого: " + ex.Message);
    }
Ответ написан
Комментировать
DarkRaven
@DarkRaven
разработка программного обеспечения
Получаете исключение, скорее всего, вот тут
string money = myCommand.ExecuteScalar().ToString();

потому, что ExecuteScalar вернет NULL, который Вы не можете привести к строке.
Как это можно обойти.
К примеру, вот так:
string money = myCommand.ExecuteScalar()?.ToString();
и в money окажется значение NULL. Или вот так
string money = myCommand.ExecuteScalar()?.ToString() ?? "";
и в money окажется пустая строка.
Я не уверен, что последний вариант - лучший, но тут вам смотреть, что удобнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы