2016-03-21 114 views
0
private void MovieDisp1() 
{ 
    SqlConnection cn = new SqlConnection("Data Source = localhost; Initial Catalog = CinemaProj; Integrated Security = SSPI"); 
    SqlCommand cmd = new SqlCommand(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    cmd.Connection = cn; 
    cmd.CommandType = CommandType.Text; 
    cn.Open(); 
    cmd.CommandText = "Select CM_MovieName, CM_MovieDesc, CM_MovieImage from Tbl_CMovies where CM_ID = '1'"; 
    SqlDataReader rd = cmd.ExecuteReader(); 

    while (rd.Read()) 
    { 
     labelmoviename1.Text = rd[0].ToString(); 
     labelmoviedesc1.Text = rd[1].ToString(); 
     byte[] img = (byte[])(rd[2]); 
     if(img == null) 
     { 
      ImageMovie1.Image = null; 
     } 
     else 
     { 
      MemoryStream ms = new MemoryStream(img); 
      ImageMovie1.Image = Image.FromStream(ms); 
     } 
    } 
    cn.Close(); 
} 

我制作了一个名为MovieDisp1的方法来从我的数据库中检索包括图像的所有信息。但现在我有一个错误在将图像从数据库显示到图像控件

ImageMovie1.Image = NULL

以及

ImageMovie1.Image = Image.FromStream(MS)

错误是这样的:

'System.Web.UI.WebControls.Image'不包含'Image'的定义,并且没有找到接受类型'System.Web.UI.WebControls.Image'的第一个参数的扩展方法'Image'您错过了使用指令或程序集引用?)

是否意味着我无法使用.Image for Image Control?是否有任何扩展方法可以用来修复这个错误?谢谢!

+1

一切实现[IDisposable的] (https://msdn.microsoft.com/en-us/library/system.idisposable(v=vs.110).aspx)接口需要妥善处置。你的代码中没有这样做。你需要将它们封装在[using statements](https://msdn.microsoft.com/en-us/library/yh598w02.aspx)中,或者在'finally'块中调用'.Dispose()'。 – mason

回答

0

首先要考虑的是,你的图像数据库中的数据类型应该是VarBinary(MAX)。 //对于<img>标签使用

using(SqlConnection cn = new SqlConnection("Data Source = localhost; Initial Catalog = CinemaProj; Integrated Security = SSPI")) 
{ 
      SqlCommand cmd = new SqlCommand("SELECT IMAGE FROM t_TableName WHERE ID=1", cn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      da.fill(ds); 

     foreach(DataRow dr in ds.Table[0].Rows) 
     { 
      imgByte = (byte[])(dr["Image"]); 
     } 
     string strBase64 = Convert.ToBase64String(imgByte); 
} 

这个(imgF是IMG标签的ID):

imgF.Src = "data:Image/png;base64," + strBase64; 

//为<asp:Image>使用这样的:

imgF.ImageUrl = "data:Image/png;base64," + strBase64; 
+0

实现[IDisposable](https://msdn.microsoft.com/en-us/library/system.idisposable(v = vs.110).aspx)界面的所有内容都需要妥善处理。你的代码中没有这样做。您需要将它们封装在[using statements](https://msdn.microsoft.com/en-us/library/yh598w02.aspx)中,或者在finally块中调用.Dispose()。 – mason

+0

哦,是的,我站在纠正..我太集中在他的问题的解决方案...我编辑我的答案:)谢谢先生 –