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

Aze*_*eem 1 .net c# visual-studio-2010 sql-server-2008 winforms

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

//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);
    }
Run Code Online (Sandbox Code Playgroud)

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

pictureBox1.Image = Image.FromStream(new MemoryStream(pic));
Run Code Online (Sandbox Code Playgroud)


当我使用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);
}
Run Code Online (Sandbox Code Playgroud)


请帮帮我!

Ren*_*iuz 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);
}
Run Code Online (Sandbox Code Playgroud)

  • @NidaSulheri引用杰夫阿特伍德来引用未来的谷歌:"SO的终极意图是集体增加世界上优秀编程知识的总和". (2认同)