내 Windows 양식에서 이미지 (SQL Server 유형 이미지에 저장 됨)를로드하고 싶습니다. 때때로 코드 아래에서 정상적으로 작동하지만 데이터베이스를 업데이트 한 후 양식을로드 한 후 다음 오류가 발생했습니다.
'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();
}
내가 놓친 것이 무엇인지 또는 무엇을해야하는지 언급 할 수 있습니까?
미리 감사드립니다
널 필드를 캐스트하려고하기 때문입니다. 즉 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();
}
도움이 되었기를 바랍니다...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다