2015-06-05 79 views
0

我想在我的窗體窗體中加載圖像(存儲在圖像類型的sql服務器中)有時下面的代碼工作正常,但是在更新我的數據庫和加載我的表單後,出現以下錯誤在圖片框c中加載圖片時出現錯誤#

無法轉換類型的對象 'System.DBNull' 爲類型 'System.Byte []'。

我的代碼正在爲:

 cmd = new SqlCommand("sp_atnd_detail",conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@userid", Login.userid); 
     ad = new SqlDataAdapter(cmd); 
     ds = new DataSet(); 
     ad.Fill(ds,0,0,"vw_EmpAtnd"); 
     gvDetail.DataSource = ds.Tables["vw_EmpAtnd"]; 
     conn.Open(); 
     dr = cmd.ExecuteReader(); 
     if (dr.Read()) 
     { 
      txtName.Text = dr["Employee"].ToString(); 
      txtNic.Text = dr["NIC"].ToString(); 
      txtUserName.Text = dr["UserName"].ToString(); 
      txtRole.Text = dr["Role"].ToString(); 
      byte[] Img = (byte[])dr["Pic"]; 
      MemoryStream ms = new MemoryStream(Img); 
      picEmp.Image = Image.FromStream(ms); 
      picEmp.Refresh(); 
      conn.Close(); 
      dr.Close(); 
     } 

任何機構可以提我缺少什麼或做什麼?

在此先感謝

回答

1

因爲你想投一個空場。即,pic字段可能不適用於表中的某些員工記錄。因此,嘗試鑄造它,像之前檢查現場,

cmd = new SqlCommand("sp_atnd_detail",conn); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@userid", Login.userid); 
    ad = new SqlDataAdapter(cmd); 
    ds = new DataSet(); 
    ad.Fill(ds,0,0,"vw_EmpAtnd"); 
    gvDetail.DataSource = ds.Tables["vw_EmpAtnd"]; 
    conn.Open(); 
    dr = cmd.ExecuteReader(); 
    if (dr.Read()) 
    { 
     txtName.Text = dr["Employee"].ToString(); 
     txtNic.Text = dr["NIC"].ToString(); 
     txtUserName.Text = dr["UserName"].ToString(); 
     txtRole.Text = dr["Role"].ToString(); 
     if (!dr.IsDBNull(dr.GetOrdinal("Pic"))) 
     { 
      byte[] Img = (byte[])dr["Pic"]; 
      MemoryStream ms = new MemoryStream(Img); 
      picEmp.Image = Image.FromStream(ms); 
      picEmp.Refresh(); 
     } 
     conn.Close(); 
     dr.Close(); 
    } 

希望這有助於...

+0

非常感謝你..它的工作原理 – Waqas