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进行图像控制?是否有任何扩展方法可以使用,以便我可以修复此错误?谢谢!
答案 0 :(得分:0)
首先要考虑的是,数据库中Image的数据类型应为VarBinary(MAX)。
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);
}
// <img>
代码使用此代码(imgF是img TAG的ID):
imgF.Src = "data:Image/png;base64," + strBase64;
// <asp:Image>
使用此代码:
imgF.ImageUrl = "data:Image/png;base64," + strBase64;
答案 1 :(得分:-1)
请尝试阅读:ASP Image Class
而且:Use Byte Array to Create an Image
另一个:how-to-display-image-from-database
不是试图将数据库图像转换为图像对象,而是只获取数据并将其存储在byte []数组中,并直接在图像src中使用二进制数据。
创建图片元素:
<img runat="server" id="image" />
然后将该字节数组传递给image标签.src属性。有关here.
的更多信息