我将一组PNG图像存储在LONGBLOB类型的MySQL数据库中。我试图使用C#检索它们。这是我第一次尝试检索LONGBLOB类型,我读到的所有内容似乎都没有帮助到目前为止。 StackOverflow上的那些关联,但使用不同的语言或不同类型的SQL,所以我还没有找到这个特定语言和SQL版本的确切答案,以及如何将其转换为System.Drawing.Image。
这是我的结构:
public struct HeadshotOBJ
{
public int ID;
public System.Drawing.Image Headshot;
public int HairColorID;
public int HairLengthID;
public int HairTypeID;
public int EyeColorID;
public int GenderID;
public int SkinToneID;
public int BodyTypeID;
}
接下来,我有以下内容来检索我的字段:
query.Append("SELECT * FROM headshots;");
cmd = new MySqlCommand(query.ToString(), conn);
// Execute query
dr = cmd.ExecuteReader();
while (dr.Read())
{
HeadshotOBJ headshot;
headshot.ID = Convert.ToInt32(dr["id"]);
headshot.Headshot = dr["headshot"]; // Need to convert somehow to System.Drawing.Image here.
headshot.HairColorID = Convert.ToInt32(dr["hair_color_id"]);
headshot.HairLengthID = Convert.ToInt32(dr["hair_length_id"]);
headshot.HairTypeID = Convert.ToInt32(dr["hair_type_id"]);
headshot.EyeColorID = Convert.ToInt32(dr["eye_color_id"]);
headshot.GenderID = Convert.ToInt32(dr["gender_id"]);
headshot.SkinToneID = Convert.ToInt32(dr["skin_tone_id"]);
headshot.BodyTypeID = Convert.ToInt32(dr["body_type_id"]);
lstHeadShots.Add(headshot);
}
我确定我需要阅读其中的字节,但我对如何操作以及代码中的内容感到遗憾。我不是SQL的新手,我的工作过去使用过BLOB,但我之前从未尝试过检索过,特别是在将数据存储到System.Drawing.Image对象时。
答案 0 :(得分:1)
不确定这是否真的算是"重复"问题,因为它是我发现的几个问题的组合,但是......
根据this,您可以将BLOB读作byte[]
数组:
byte[] imageBytes = (byte[])dr["headshot"];
从那里,你可以convert that to an Image
:
using (var ms = new MemoryStream(imageBytes))
{
headshot.Headshot = System.Drawing.Image.FromStream(ms);
}