我正在尝试将一些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有两张图片,但它们都是数据库的第一张图片。所以我想问题必须在这个方法中。
感谢您的帮助。
答案 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));
}
}
我认为,您的信息流可能仍然以第一张图片开头