从数据库中检索多个图像

本文关键字:图像 检索 数据库 | 更新日期: 2023-09-27 18:30:16

所以我正在做我的第一个项目,现在有一些东西让我有点疯狂,我一直在寻找,但我似乎找不到答案。

我的数据库中有两个表,一个用于员工数据(employeedata),另一个只包含他们家中的图片(housepictures),只有三个字段(PhotoID,EmployeeID,Photo),使用外键从员工数据表中获得EmployeeID。

我正在尝试从此表中检索图片并将它们放入他们的相关 PictureBox 中(总共有六张,因为我只为员工存储了 6 张图片),但我只设法检索第一张图片,或最后一张,或第一张图片并在每个 PictureBox 中重复它(同一张照片)。这是我当前的代码:

    try
    {
        using (MySqlConnection conn = new MySqlConnection(connDB.connstring))
        {
            using (MySqlCommand cmd = new MySqlCommand("select HousePicture from Employees.housepictures where EmployeeID='" + id + "'", conn))
            {
                conn.Open();
                using (MySqlDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.Read())
                    {
                        PictureBox[] pb = { pictureBoxHouse1, pictureBoxHouse2, pictureBoxHouse3, pictureBoxHouse4, pictureBoxHouse5, pictureBoxHouse6 };
                        for (int i = 0; i < pb.Length; i++)
                        {
                            using (MemoryStream stream = new MemoryStream())
                            {
                                if (dr["HousePicture"] != DBNull.Value)
                                {
                                    byte[] image = (byte[])dr["HousePicture"];
                                    stream.Write(image, 0, image.Length);
                                    Bitmap bitmap = new Bitmap(stream);
                                    pb[i].Image = bitmap;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

任何建议将不胜感激!

从数据库中检索多个图像

首先尝试获取结果,然后使用 while(而不是 if)遍历所有这些返回的记录。您可以保持大部分代码不变,并在循环的每次迭代中增加一个计数器,以便在数组中设置正确的PictureBox

PictureBox[] pb = { pictureBoxHouse1, pictureBoxHouse2, pictureBoxHouse3,
                    pictureBoxHouse4, pictureBoxHouse5, pictureBoxHouse6 };
using (MySqlDataReader dr = cmd.ExecuteReader())
{
    int i = 0;
    while (dr.Read())
    {
        using (MemoryStream stream = new MemoryStream())
        {
            if (dr["HousePicture"] != DBNull.Value)
            {
                byte[] image = (byte[])dr["HousePicture"];
                stream.Write(image, 0, image.Length);
                Bitmap bitmap = new Bitmap(stream);
                pb[i].Image = bitmap;
            }
        }
        i++;
    }
}