从 SQL Server 2008 到 PictureBox 的图像加载失败

本文关键字:图像 加载 失败 PictureBox SQL Server 2008 | 更新日期: 2023-09-27 18:34:31

我无法从SQL Server 2008数据库中读取图像并将其加载到Windows Forms PictureBox中。这是从数据库检索图像的代码:

//UI Button Binded Code
private void LoadImage_Click(object sender, RoutedEventArgs e)
{
   DataSet data = DBClient.GetEmployee(_EID[0]);
   //...
   //...
   byte[] pic = (byte[])data.Tables[0].Rows[0]["Picture"];
   EmployeeCardForm ef = new EmployeeCardForm(name, fname, nic, deptt, desig, doj, address, ecode, pic);
   ef.Show();
}
 //EmployeeCardForm Constructor File Code
 public EmployeeCardForm(String name, String fname, String nic, String deptt, String desig, String doj, String address, String ecode, byte[] pic)
 {
        InitializeComponent();
        this.MaximizeBox = false;
        label18.Text = "Record has been successfully Saved. Please take Print out by pressing Print Button below!";
        try
        {
            pictureBox1.Image = Image.FromStream(new MemoryStream(pic));
            //Some code here
        }
        catch (IOException e)
        {
            MessageBox.Show("Some Error occurred!");
        }
        //declare event handler for printing in constructor
        printdoc1.PrintPage += new PrintPageEventHandler(printdoc1_PrintPage);
    }

当我运行此程序并单击按钮以加载图像时,应用程序变得无响应。调试后,我发现以下代码行有问题:

pictureBox1.Image = Image.FromStream(new MemoryStream(pic));


当我使用 try/catch 块时,它向我显示了以下异常:
System.ArgumentException: Parameter is not valid. at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData) at System.Drawing.Image.FromStream(Stream stream) at SimpleReport.EmployeeCardForm..ctor(String name, String fname, String nic, String deptt, String desig, String doj, String address, String ecode, Byte[] pic) in D:'O Projects'EM'SimpleReport'EmployeeCardForm.cs:line 60

这就是我将图像保存到DB中的方式:

private void SaveImage_Click(object sender, RoutedEventArgs e)
{
     Picture_Path= filename;
     FileStream fs;
     fs = new FileStream(@Picture_Path, FileMode.Open, FileAccess.Read);
     //a byte array to read the image
     byte[] picbyte = new byte[fs.Length];
     fs.Read(picbyte, 0, System.Convert.ToInt32(fs.Length));
     fs.Close();
     DBClient.AddEmployee(ecode, emp_name.Text, fname, nic, deptt, desig, doj, address, picbyte);
}


请帮帮我!

从 SQL Server 2008 到 PictureBox 的图像加载失败

经过一番聊天,问题是图片二进制文件以不正确的格式存储在数据库中。这可能是几个问题:

  1. 表字段的类型/大小不正确。
  2. 字节读取不正确

首先检查您是否具有varbinary(max)类型''大小的数据表字段。

其次 - 这是读取文件所有字节的方法:

private void SaveImage_Click(object sender, RoutedEventArgs e)
{
    byte[] allFileBytes = File.ReadAllBytes(filename); 
    DBClient.AddEmployee(ecode, emp_name.Text, fname, nic, deptt, desig, doj, address, allFileBytes);
}