【问题标题】:Displaying Image from Database to an Image Control将图像从数据库显示到图像控件
【发布时间】:2016-03-21 01:10:12
【问题描述】:
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”可以找到(您是否缺少 using 指令或程序集引用?)

这是否意味着我不能使用 .Image 进行图像控制?是否可以使用任何扩展方法来修复此错误?谢谢!

【问题讨论】:

  • 所有实现IDisposable 接口的东西都需要妥善处理。你还没有在你的代码中这样做。您要么需要将它们包装在 using statements 中,要么在 finally 块中调用 .Dispose()

标签: c# asp.net image


【解决方案1】:

首先要考虑的是,数据库中图像的数据类型应该是 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标签的ID):

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

//对于<asp:Image>使用这个:

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

【讨论】:

  • 所有实现IDisposable 接口的东西都需要妥善处理。你还没有在你的代码中这样做。您要么需要将它们包装在 using statements 中,要么在 finally 块中对它们调用 .Dispose()。
  • 哦,是的,我的立场是正确的。我过于关注他的问题的解决方案...我编辑了我的答案:) 谢谢先生
  • 在经历了许多代码示例之后,这对我有用。谢谢,JC。
【解决方案2】:

尝试阅读:ASP Image Class

还有这个:Use Byte Array to Create an Image

另一个:how-to-display-image-from-database

与其尝试将数据库图像转换为图像对象,不如直接获取数据并将其存储在 byte[] 数组中,然后直接在图像 src 中使用二进制数据。

创建您的图像元素:

<img runat="server" id="image" />

然后将该字节数组传递给图像标签的 .src 属性。有更多关于here.的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2015-06-22
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多