Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将MySQL中的图像块检索到C#应用程序中?_C#_Mysql - Fatal编程技术网

如何将MySQL中的图像块检索到C#应用程序中?

如何将MySQL中的图像块检索到C#应用程序中?,c#,mysql,C#,Mysql,我在我的MySQL数据库LONGBLOB类型中存储了一组PNG图像。我正在尝试使用C#检索它们。这是我第一次尝试检索LONGBLOB类型,到目前为止,我读到的所有内容似乎都没有帮助。StackOverflow上的版本相关,但使用不同的语言或不同类型的SQL,因此我尚未找到此特定语言和SQL版本的确切答案,以及如何将其转换为System.Drawing.Image 这是我的结构: public struct HeadshotOBJ { public int ID; public S

我在我的MySQL数据库LONGBLOB类型中存储了一组PNG图像。我正在尝试使用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,但我从未尝试过自己检索blob,尤其是在将数据存储到System.Drawing.Image对象中时

不确定这是否真的算作“重复”问题,因为这是我发现的几个问题的组合,但是

根据,您可以将BLOB读取为
字节[]
数组:

byte[] imageBytes = (byte[])dr["headshot"];
从那里,您可以:


如果MySQL以SQL Server相同的方式处理它,至少在代码中是这样,那么您应该能够以
字节[]
的形式读取BLOB。然后您可以将其转换为一个
系统.Drawing.Image
:老实说,我通常不直接使用字节,因此看到一个这样的示例将有助于学习(如果这与上面链接的问题结合起来有效,那么我很乐意将其添加为下面的答案。我使用注释的唯一原因是我不确定它是否有效,并且没有MySQL可供测试。)dr[“my_field”]返回一个对象,而不是字节。
using (var ms = new MemoryStream(imageBytes))
{
    headshot.Headshot = System.Drawing.Image.FromStream(ms);
}