无法从c#中的数据库中检索图像

时间:2016-04-08 15:32:46

标签: c# asp.net

我已将图像存储在本地mdf数据库中,以字节为单位。检索它时我遇到了麻烦。我正在使用ASP.net和c#。

  

错误1'System.Web.UI.WebControls.Image'不包含   'Image'的定义,没有扩展方法'Image'接受a   “System.Web.UI.WebControls.Image”类型的第一个参数可以是   发现(您是否缺少using指令或程序集引用?)

     

错误2'图像'是一个模棱两可的参考   'System.Drawing.Image'和'System.Web.UI.WebControls.Image'

以下是我的代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Drawing;
using System.Web.UI.WebControls;

private void LoadImage()
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename=C:\Users\Donald\Documents\Visual Studio 2013\Projects\DesktopApplication\DesktopApplication\Student_CB.mdf ;Integrated Security=True");
        con.Open();
        try
        {
            //Fetching top recipe     
            string query = "Select Image FROM Recipe_Image where Image_Name = '"+VeganLbl1.Text+"'";
            SqlCommand command = new SqlCommand(query, con);
            SqlDataAdapter da = new SqlDataAdapter(command);
            DataTable dt = new DataTable();
            da.Fill(dt);

            byte[] img = (byte[])dt.Rows[0][0];
            MemoryStream ms = new MemoryStream(img);
            Image1.Image = Image.FromStream(ms);
            da.Dispose();
        }
        catch (Exception)
        {



        }

        con.Close();
    }

有没有人对如何完成此任务有任何想法并使其正常运行。一旦我能够做到这一点,我的所有代码都非常好。

同样是的,我知道我没有使用参数。一旦我能够显示图像,这将很快到来。

2 个答案:

答案 0 :(得分:1)

你有几个问题

  1. 您使用Image.FromStream(ms)的错误图像类。而是写:System.Drawing.Image.FromStream(ms)。 (但你还是不需要这个)
  2. Image.FromStream(ms)返回image个对象,Image1.ImageUrl想要一个字符串路径。
  3. 您需要做的是将Image1.ImageUrl指向将图像字节数组写入响应流的页面。

    在您的代码点到页面GetImage.aspx

    Image1.ImageUrl = "GetImage.aspx";
    

    GetImage页面中,将带有图像的内存流写入响应输出流:

    Response.Clear();
    Response.ContentType = "image/jpg"; //Or whatever it is
    Response.Buffer = true;
    ms.WriteTo(Response.OutputStream);
    Response.End();
    

答案 1 :(得分:0)

我更喜欢使这个HTML更易于管理,因此将SQL二进制文件传输到文件并使用HTML代码显示它。 尝试使用System.IO命名空间将映像写入临时服务器位置,然后使用临时文件路径使用HTML标记显示它。在会话结束时删除临时文件。如果您需要代码,请告诉我。