将几个BLOB从sql数据库加载到C#中的ListView中

时间:2014-06-30 19:15:12

标签: c# sql winforms listview blob

我正在尝试将一些BLOB文件(一些随机图片)加载到C#中的ListView中。如果我使用这样的select语句,我可以从数据库中读出一张图片:

"从图片中选择图片,其中id = 1"例如。

但是如何从数据库中读取所有图片?我试过这段代码:

public List<Bitmap> fetchPictures()
        {
            List<Bitmap> mPictures = new List<Bitmap>();
            DataTable dt;
            sql = "SELECT picture FROM Picture";

                using (var cmd = new MySqlCommand(sql, conn))
                {
                    //cmd.Parameters.AddWithValue("@ID", 6);
                    DataSet ds = new DataSet();
                    byte[] MyData = new byte[0];
                    MySqlDataAdapter da = new MySqlDataAdapter(cmd);

                    da.Fill(ds, "Picture");
                    dt = ds.Tables["Picture"];
                    DataRow myRow;

                    MemoryStream mStream = new MemoryStream();

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        myRow = dt.Rows[i];
                        MyData = (byte[])myRow["Picture"];
                        mStream.Write(MyData, 0, Convert.ToInt32(MyData.Length));
                        mPictures.Add(new Bitmap(mStream, false));
                    }

                    mStream.Dispose();
                    return mPictures;
                }

        }

正如您所看到的,我尝试阅读所有图片并将其添加到位图列表中。该数据库目前填充了两个不同的图片。如果我运行程序,ListView有两张图片,但它们都是数据库的第一张图片。所以我想问题必须在这个方法中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

尝试更改代码以使其具有此

for (int i = 0; i < dt.Rows.Count; i++)
{
    using (MemoryStream mStream = new MemoryStream())
    {
        myRow = dt.Rows[i];
        MyData = (byte[])myRow["Picture"];
        mStream.Write(MyData, 0, Convert.ToInt32(MyData.Length));
        mPictures.Add(new Bitmap(mStream, false));
    }
}

我认为,您的信息流可能仍然以第一张图片开头