如何从数据库中读取图片

3
OleDbCommand and = new OleDbCommand();
c.Open();
and.Connection = c;
and.CommandText = "SELECT * FROM MaleShoes WHERE IDhere=ID ";
OleDbDataReader read = and.ExecuteReader();
while (read.Read())
{
    label6.Text = (read[1].ToString());
    textBox1.Text = (read[2].ToString());
    pictureBox1.Image = (read[3].ToString());  
}

c.Close();

我遇到了这个错误:

错误 1 无法隐式将类型 “string” 转换为“System.Drawing.Image”

我应该如何解决它?

我的图片存储在数据库的第三列。


4
它们在你的数据库中以什么格式进行编码? - sa_ddam213
4
你的数据库中的这一列,它是保存文件(比如 blob 字段)还是保存了图片的路径和文件名? - nvoigt
2
read[3] 包含图像的路径吗? - Swanand
1
或者如果read[3]包含OLE对象(二进制文件) - Pyromancer
1
该路径是否为本地路径并且可以从您的应用程序访问? - sa_ddam213
显示剩余5条评论
4个回答

6
如果你的数据库列包含图像文件的路径,你应该写成:
pictureBox1.Image = Image.FromFile((string)read[3]);

如果是图像数据(二进制),您应该编写:

var bytes = (byte[])read[3];
using(MemoryStream ms = new MemoryStream(bytes))
{
    pictureBox1.Image = Image.FromStream(ms);
}

在使用这个时,图片路径的格式是怎样的呢?是这样的吗?@"....\image.jpg" - YOUn'Me
@YOUn'Me 路径可以是相对路径(@".\Images\1.png")或绝对路径(@"D:\Project\Images\1.png")到图像文件。 - Mohammad Dehghan

4

希望这可以帮到你(如果你正在存储二进制数据):

pictureBox1.Image = byteArrayToImage((byte[])read[3]);  

而你的方法

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}

1
不要忘记 using System.IO :) - Pyromancer
参数无效。 - YOUn'Me
请查看http://www.codeproject.com/Articles/90908/Saving-OLE-Object-as-Image-Datatype-in-SQL,其中包含几乎相同的示例。 - Alex

1
你也可以使用这个。
  byte[] imagebyte = (byte[])read[3].ToString();

  MemoryStream ms = new MemoryStream();
  ms.Write(imagebyte, 0, imagebyte.Length);
  Bitmap bmp = new Bitmap(ms);
  pictureBox1.Image = bmp;

byte[] imagebyte = (byte[])read[3].ToString(); 那里读取了什么? - lexter

0

你可以尝试这样做:

MemoryStream ms = new MemoryStream((byte[])read[1]);

pictureBox1.Image = Image.FromStream(ms);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接