@a63826ndrew
Студент, новичок в Python

Как правильно обработать исключение?

Здравствуйте!
private void LoadSave_Click(object sender, EventArgs e)
        {
            SQLiteConnection load = new SQLiteConnection ("Data source = accounts.db");
            load.Open();
            SQLiteCommand cmd = new SQLiteCommand($"SELECT Name FROM users WHERE Login = '{LoginField.Text}'", load);
            SQLiteCommand comand = new SQLiteCommand($"SELECT Surname FROM users WHERE Login = '{LoginField.Text}'", load);
            SQLiteCommand command = new SQLiteCommand($"SELECT Image FROM users WHERE Login = '{LoginField.Text}'", load);
            SQLiteDataReader Reader = cmd.ExecuteReader();
            SQLiteDataReader Readr = comand.ExecuteReader();
            SQLiteDataReader reader = command.ExecuteReader();
            while (Reader.Read())
            {
                NameField.Text = Reader["Name"].ToString();
            }
            Reader.Close();
            while (Readr.Read())
            {
                SurnameField.Text = Readr["Surname"].ToString();
            }
            Readr.Close();
            while (reader.Read())
            {
                
                if (image == null)
                    pictureBox1.Image = null;

                else
                {
                    string foto = (string)reader["Image"];
                    byte[] image = Convert.FromBase64String(foto);
                    MemoryStream memoryStream = new MemoryStream(image);
                    pictureBox1.Image = Image.FromStream(memoryStream);
                }
            }
            load.Close();

Имеется вот такой код, который запускается при нажатии кнопки, он должен брать из БД данные и показывать их на форме. И здесь меня интересует вот это:
if (image == null)
Я хочу обработать исключение, что если в БД не хранится Image то picturebox = ноль, и как мне сделать условие на проверку наличия Image у определенного пользователя?
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@vabka Куратор тега C#
Токсичный
Что-то заорал с этого кода:
SQLiteCommand cmd = new SQLiteCommand($"SELECT Name FROM users WHERE Login = '{LoginField.Text}'", load);
            SQLiteCommand comand = new SQLiteCommand($"SELECT Surname FROM users WHERE Login = '{LoginField.Text}'", load);
            SQLiteCommand command = new SQLiteCommand($"SELECT Image FROM users WHERE Login = '{LoginField.Text}'", load);
            SQLiteDataReader Reader = cmd.ExecuteReader();
            SQLiteDataReader Readr = comand.ExecuteReader();
            SQLiteDataReader reader = command.ExecuteReader();

И у вас не возникло ощущение, что вы что-то делаете не так и люди не пишет Reader,Readr, reader, cmd, command?
В вашем случае нужно писать что-то типа этого:
using System;
using System.Data;
using System.Data.SQLite;

using var connection = new SQLiteConnection("Data source = accounts.db");
connection.Open();
using var cmd = new SQLiteCommand("SELECT Name, Surname, Image FROM users WHERE Login = @Login", connection)
{
	// Параметры используются, чтобы защититься от SQL-инъекций
	Parameters =
	{
		new SQLiteParameter("@Login", "test") // то значение, которое должно быть подставлено вместо @Login
	}
};
using var reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
var name = reader.GetString("Name");
var surname = reader.GetString("Surname");
var image = reader.IsDBNull("Image")
	? null
	: Convert.FromBase64String(reader.GetString("Image"));
connection.Close();
// Делаем с name, surname и image что хотим

Ещё я советую использовать async-await, чтобы интерфейс программы не зависал, пока запрос выполняется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы