Fahad Roger Ответов: 2

Как получить несколько изображений из базы данных SQL и отобразить их в автоматически созданном picturebox?..


мне нужно получить несколько изображений из базы данных sql server и отобразить их с помощью автоматически созданного picturebox внутри панели flowlayout, но он отображает одно и то же изображение из первой строки таблицы.

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

while (flowLayoutPanel.Controls.Count > 0)
            {
                flowLayoutPanel.Controls[0].Dispose();
            }
                con = new SqlConnection(@"Data Source=(local);Initial Catalog=hotel_manage;Integrated Security=True");
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from item where cat_id=5", con);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                for (int i = 0; i < dt.Rows.Count;++i)
                {
                    PictureBox pic = new PictureBox();
                        con.Open();
                        SqlCommand cmmd = new SqlCommand("select image from item where cat_id=5", con);
                        Byte[] bytes = (Byte[])cmmd.ExecuteScalar();
                        MemoryStream ms = new MemoryStream(bytes);
                        pic.Image = Image.FromStream(ms);
                        pic.SizeMode = PictureBoxSizeMode.AutoSize;
                        this.flowLayoutPanel.Controls.Add(pic);
                }
        }

2 Ответов

Рейтинг:
2

CHill60

Вы всегда получаете только один элемент из базы данных

SqlCommand cmmd = new SqlCommand("select image from item where cat_id=5", con);
Я думаю, что вам нужно удалить предложение where из заливки, а затем использовать cat_id для каждой строки в качестве параметра для cmmd команда


Рейтинг:
12

OriginalGriff

Ну да. Это потому, что вы просите один и тот же образ каждый раз, когда идете по кругу:

SqlCommand cmmd = new SqlCommand("select image from item where cat_id=5", con);
Если вы замените "5" на значение из вашего цикла, то он будет возвращать разные изображения.

Но... вы уже извлекли все изображения, и они находятся в вашем DataTable - так почему бы не использовать значения непосредственно оттуда?
byte[] bytes = (byte[]) dt.Rows[i]["image"];


И я бы использовал foreach на рядах вместо а for петля.