我正在尝试将一些BLOB文件(一些随机图片)加载到C#中的ListView中。如果使用如下选择语句,则可以从数据库中读取一张图片:
例如,“从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有两张图片,但是它们都是数据库的第一张图片。所以我想问题肯定出在这种方法上。
我感谢您的帮助。
尝试更改您的代码以具有此功能
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));
}
}
我想,您的视频流可能还是从第一张图片开始
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句