从MySQL数据库获取图像 - C#
我必须存储和恢复图像到/从MySQL数据库。为此,我使用此页上提供的说明:MySQL Forum,我可以通过下面的代码成功存储图片:从MySQL数据库获取图像 - C#
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();
}
但我不能获取从数据库中的图像:我现在用下面的代码,请检查什么是错在这里:
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);
}
如何将图像存储到二进制字段?这将使比的Base64更有意义对其进行编码:
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();
}
}
}
}
然后:
using (var ms = new MemoryStream())
{
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
SaveImage(ms.ToArray());
}
,当你想要检索:
byte[] image = GetImage("New_Product");
MemoryStream stream = new MemoryStream(image);
pictureBox2.Image = Image.FromStream(ms);
我试过你的代码,但它仍然无法正常工作。 – 2012-04-14 11:47:22
如果我替换此线'而它仅工作((bytesRead = reader.GetBytes(reader.GetOrdinal( “图像”),fieldOffset,缓冲液,0,buffer.Length))> 0)'与此'而((bytesRead = reader.GetBytes(reader.GetOrdinal( “图像”),fieldOffset,缓冲液,0,buffer.Length))== buffer.Length)' – 2016-10-08 20:07:43
可以调试,看看'imgObj'是得到什么? – 2012-04-13 16:48:03