从MySQL数据库中获取图像 - C# [英] Get Image from MySQL Database - C#

查看:174
本文介绍了从MySQL数据库中获取图像 - C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要存储和恢复的图像到从MySQL数据库/。为此,我使用此页上提供的说明: MySQL的论坛,我可以成功存储图片通过下面的代码:



SaveIamge:

 无效SaveImage()
{
的MemoryStream毫秒​​=新的MemoryStream();
pictureBox1.Image.Save(MS,System.Drawing.Imaging.ImageFormat.Jpeg);
CMD =新的MySqlCommand(插入+ tableName值+(产品,制造商,说明,价格,图片)VALUES('New_Product','New_Manufacturer','New_Description','0',@Image) ,conn);在
cmd.Parameters.Add(新了MySQLParameter(@形象,Convert.ToBase64String(ms.ToArray())));
cmd.ExecuteNonQuery();
}



但我不能获取从数据库中的图像:我使用下面的代码,请检查什么是错在这里:



GetThumbnail:

 无效GetThumbnail()
{
串TN =表名[comboBox1.SelectedIndex]
CMD =新的MySqlCommand(SELECT映像从+ tableName值+WHERE产品=+ ProductTitle(),康涅狄格州);
对象imgObj = cmd.ExecuteScalar();
的byte [] B = Convert.FromBase64String(Convert.ToString(imgObj));
的MemoryStream毫秒​​=新的MemoryStream(B);
pictureBox2.Image = Image.FromStream(毫秒);
}


解决方案

如何将图像存储到二进制领域?它会更有意义比Base64编码的:

 无效SaveImage(字节[]图像)
{
按(VAR康恩=新的MySqlConnection(的ConnectionString))使用
(VAR CMD = conn.CreateCommand())
{
cmd.CommandText =INSERT INTO图片(产品,制造商,说明,价格,图像)值('New_Product','New_Manufacturer','New_Description','0',图像)?;
cmd.Parameters.Add(图像?,图像);
cmd.ExecuteNonQuery();
}
}

字节[]的getImage(串产品)
{
使用(VAR康恩=新的MySqlConnection(的ConnectionString))
使用(VAR CMD = conn.CreateCommand())
{
cmd.CommandText =SELECT映像从图片WHERE产品=产品吗?
cmd.Parameters.Add(产品?,产品);使用
(VAR读卡器= cmd.ExecuteReader())
{
如果
{
返回NULL(reader.Read()!);
}

const int的CHUNK_SIZE = 2 * 1024;
字节[]缓冲区=新的字节[CHUNK_SIZE]
长读取动作;
长fieldOffset = 0;
使用(VAR流=新的MemoryStream())
{
,而((读取动作= reader.GetBytes(reader.GetOrdinal(图像),fieldOffset,缓冲,0,buffer.Length ))大于0)
{
stream.Write(缓冲液,0,(int)的读取动作);
fieldOffset + =读取动作;
}
返回stream.ToArray();
}
}
}
}

和那么:

 使用(VAR毫秒=新的MemoryStream())
{
pictureBox1.Image.Save (MS,System.Drawing.Imaging.ImageFormat.Jpeg);
SaveImage(ms.ToArray());
}



当你想要检索:

 字节[] =图像的getImage(New_Product); 
MemoryStream的流=新的MemoryStream(图片);
pictureBox2.Image = Image.FromStream(毫秒);


I have to store and restore image into/from MySQL database. For this I used the instructions given on this page: MySQL Forum , and I can successfully store Image via following code:

SaveIamge:

    void SaveImage()
    {
        MemoryStream ms = new MemoryStream();
        pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        cmd = new MySqlCommand("INSERT INTO " + tableName + " ( Product, Manufacturer, Description, Price, Image) Values ('New_Product', 'New_Manufacturer', 'New_Description', '0', @Image)", conn);
        cmd.Parameters.Add(new MySqlParameter("@Image", Convert.ToBase64String(ms.ToArray())));
        cmd.ExecuteNonQuery();
    }

But I cannot Get the Image from database: I am using following code, please check what is wrong here:

GetThumbnail:

     void GetThumbnail()
     {
        string TN = tableNames[comboBox1.SelectedIndex];
        cmd = new MySqlCommand("SELECT Image FROM " + tableName + " WHERE Product = " + ProductTitle(), conn);
        object imgObj = cmd.ExecuteScalar();
        byte[] b = Convert.FromBase64String(Convert.ToString(imgObj));
        MemoryStream ms = new MemoryStream(b);
        pictureBox2.Image = Image.FromStream(ms);
    }

解决方案

How about storing the image into a binary field? It would make more sense than Base64 encoding it:

void SaveImage(byte[] image)
{
    using (var conn = new MySqlConnection(ConnectionString))
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "INSERT INTO pictures (Product, Manufacturer, Description, Price, Image) VALUES ('New_Product', 'New_Manufacturer', 'New_Description', '0', ?Image)";
        cmd.Parameters.Add("?Image", image);
        cmd.ExecuteNonQuery();    
    }
}

byte[] GetImage(string product)
{
    using (var conn = new MySqlConnection(ConnectionString))
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT Image FROM pictures WHERE Product = ?product";
        cmd.Parameters.Add("?product", product);
        using (var reader = cmd.ExecuteReader())
        {
            if (!reader.Read())
            {
                return null;
            }

            const int CHUNK_SIZE = 2 * 1024;
            byte[] buffer = new byte[CHUNK_SIZE];
            long bytesRead;
            long fieldOffset = 0;
            using (var stream = new MemoryStream())
            {
                while ((bytesRead = reader.GetBytes(reader.GetOrdinal("Image"), fieldOffset, buffer, 0, buffer.Length)) > 0)
                {
                    stream.Write(buffer, 0, (int)bytesRead);
                    fieldOffset += bytesRead;
                }
                return stream.ToArray();
            }
        }
    }
}

and then:

using (var ms = new MemoryStream())
{
    pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    SaveImage(ms.ToArray());
}

and when you want to retrieve:

byte[] image = GetImage("New_Product");
MemoryStream stream = new MemoryStream(image);
pictureBox2.Image = Image.FromStream(ms);

这篇关于从MySQL数据库中获取图像 - C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆