从MySQL数据库中获取图像 - C# [英] Get Image from MySQL Database - C#
本文介绍了从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屋!
查看全文