Member 13894029 Ответов: 1

Отображение изображения из базы данных в picturebox


Я сделал сканер qr-кода, и когда он успешно обнаружит qr-код, он покажет QR-код в txtDecode.text(текстовое поле), а затем покажет данные из базы данных. Я хочу, чтобы мое изображение было включено при обнаружении qr-кода

Что я уже пробовал:

sqlCon.Открыть();

Строка sqlSelectQuery = "SELECT * FROM SMStocksTb WHERE SmStockCode =" + int.Parse(txtDecode.Текст);
SqlCommand cmd = new SqlCommand(sqlSelectQuery, sqlCon);
SqlDataReader dr = cmd.Метода executereader();
если (dr.Read())
{
lblID.Text = (dr["SmStockId"].Метод toString());
lblCode.Text = (dr["SmStockCode"].Метод toString());
lblName.Text = (dr["SmStockName"].Метод toString());
lblQty.Text = (dr["SmStockQty"].Метод toString());
lblSize.Text = (dr["SmStockSize"].Метод toString());
lblLength.Text = (dr["SmStockLength"].Метод toString());

}
sqlCon.Закрывать();

Richard MacCutchan

В чем же проблема?

Richard Deeming

String sqlSelectQuery = "SELECT * FROM SMStocksTb WHERE SmStockCode = " + int.Parse(txtDecode.Text);


Не делай этого так.

В этот конкретный экземпляр, поскольку параметр анализируется как целое число, вы в безопасности. Но написание такого кода может привести и приведет к уязвимостям SQL-инъекций. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

string sqlSelectQuery = "SELECT * FROM SMStocksTb WHERE SmStockCode = @SmStockCode";
using (SqlCommand cmd = new SqlCommand(sqlSelectQuery, sqlCon))
{
    cmd.Parameters.AddWithValue("@SmStockCode", int.Parse(txtDecode.Text));
    
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        if (dr.Read())
        {
           ...
        }
    }
}


NB: int.Parse вызовет исключение, если пользователь не ввел целое число. Вы, вероятно, хотите использовать инт.Метод tryparse[^] вместо этого, что позволит вам сообщить пользователю о проблеме, если текст не является допустимым целым числом.

Member 13894029

Я изменю его прямо сейчас, спасибо @Richard Deeming за подсказку.

1 Ответов

Рейтинг:
7

Eric Lynch

Попробуйте это (где вы заменяете SmImageColumnName с фактическим именем столбца)...

byte[] imageBytes = dr["SmImageColumnName"] as byte[];

if (imageBytes != null)
{
  using(var stream = new MemoryStream(imageBytes))
    pictureBox.Image = Image.FromStream(stream);
}


Member 13894029

@Eric Lynch большое вам спасибо, это сработало! :)

Eric Lynch

Всегда пожалуйста. Я также предлагаю проверить комментарий Ричарда Диминга к вашему вопросу. В противном случае ваше приложение потенциально является очень легкой мишенью для хакеров.