0

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

//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

这就是我将图像保存到数据库中的方式:

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);
}


请帮帮我!

4

1 回答 1

5

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

  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);
}
于 2012-05-18T13:37:17.763 回答