0

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

このプログラムを実行し、ボタンをクリックしてイメージをロードすると、アプリケーションが応答しなくなりました。デバッグ後、次のコード行に問題があることがわかりました。

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


私を助けてください!

4

1 に答える 1

5

いくつかのチャットの後、画像バイナリがデータベースに不適切な形式で保存されているという問題がありました。いくつかの問題が考えられます:

  1. テーブル フィールドの型/サイズが正しくありません。
  2. 不正なバイト読み取り

まずvarbinary(max)、データ テーブル フィールドのタイプ\サイズがあるかどうかを確認します。

2番目-ファイルのすべてのバイトを読み取る方法は次のとおりです。

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 に答える