如何在数据库中显示图像?

时间:2014-02-06 09:34:49

标签: asp.net sql-server c#-4.0 datalist

我有一个带有图像控件的datalist,其aspx代码是

    <asp:DataList ID="DataList1" runat="server" 
        RepeatDirection="Horizontal" RepeatColumns="4">
            <ItemTemplate>
                <div>
                    <asp:Image ID="Image1" ImageUrl='<%#Eval("IMAGE") %>' 
                     runat="server" Height="75px" Width="75px" />
                </div>
            </ItemTemplate>
        </asp:DataList>

我正试图从数据库中获取图像的代码是

    PagedDataSource objds = new PagedDataSource();
        string query = "SELECT * FROM Icon";
        SqlConnection con = new SqlConnection();
        con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ICONBANKConnectionString"].ConnectionString;
        try
        {
            SqlCommand cmd = new SqlCommand(query, con);
            con.Open();
            //SqlDataReader dr = cmd.ExecuteReader();
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = new SqlCommand(query, con);
            DataSet ds = new DataSet();
            da.Fill(ds, "images");
            objds.DataSource = ds.Tables[0].DefaultView;

            DataList1.DataSource = objds;
            DataList1.DataBind();
            con.Close();
        }
        catch (Exception)
        {

            throw;
        }

sql表看起来像这样

    Icon( ID, SUBCAT_ID, ALBUM_ID, SUBCAT_NAME, ALBUM_NAME, IMAGE, ICON_SIZE, 
    BLACKWHITE, NAME, DESIGNER, HITS, RATINGS, PRICE)

当我调试代码时,它显示数据集中的表行,但是当我运行页面时,它没有向我显示图像....请指导我背后的问题是什么。图像存储在数据库中的另一件事是二进制格式

1 个答案:

答案 0 :(得分:1)

您正在将字节[]或二进制数据设置为ImageURL字段,这是错误的。图像URL需要一个路径。

查看这个问题和答案:

Convert from binary data to an image control in ASP.NET

在datalist的itemdatabound事件中,找到您的图像控件。如果你正在使用html标签设置src属性,如果你正在使用,请查看这个答案:

//Find your image control (Image1 lets say) on the item databound event of the datalist.
Byte[] myImage = GetMyImageFromMyDataSource();
String st = Server.MapPath("myImageNameOrID.jpg"); // Try Name + ID to make it unique
FileStream fs = new FileStream(st, FileMode.Create, FileAccess.Write);
fs.Write(myImage, 0, myImage.Length);
fs.Close();
Image1.ImageUrl = "myImageNameOrID.jpg"; 

编辑:查看此链接以了解有关使用datalist的itemdatabound事件的更多信息:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.itemdatabound%28v=vs.110%29.aspx