从mysql中检索blob并使用asp.net c#和linq datasource中的repeater进行显示

时间:2013-03-05 21:25:57

标签: c# asp.net mysql linq-to-sql repeater

我已在 mysql数据库的类别表中的 Longblob 数据类型的字段categoryImage中手动存储图像。我添加了一个devart linq-mysql模型来从数据库中检索数据。

我已将 linq数据源添加到转发器控件,并希望直接从数据库中检索blob数据类型图像。当我写这段代码时  <%# Eval("CategoryImage" %>

我得到一个System.Byte []作为输出。有人给我一个建议,我应该使用方法

将字节数组转换为图像
    public System.Drawing.Image byteArrayToImage (System.Byte[] ByteInArray)
    {
        MemoryStream ms = new MemoryStream(ByteInArray);
        System.Drawing.Image returnimage = System.Drawing.Image.FromStream(ms);
        return returnimage;

    }              

当我编写此代码时<%# byteArrayToImage(Eval("CategoryImage") %>它给出了一个错误byteArrayToImage(btye[])有一些无效的参数。任何人都可以帮我解决这个问题。

提前感谢..

1 个答案:

答案 0 :(得分:1)

首先,您的代码似乎没有很好地形成:

<%# byteArrayToImage(Eval("CategoryImage") %>

应该是:

<%# byteArrayToImage(Eval("CategoryImage")) %>

此外,Eval方法返回objectbyteArrayToImage方法参数的类型为System.Byte[],因此您必须将其强制转换为正确的类型。

此外,如果您明确了要应用byteArrayToImage方法返回值的元素,那会更好。它可能无法与System.Drawing.Image的实例一起正常工作。

如果您尝试根据<asp:Image>创建System.Drawing.Image控件,则只需won't work,因为该控件仅支持通过URL加载图像。

另一种方法是为您的图片创建自定义HTTP处理程序,或者使用图像内容创建文件并将URL提供给<asp:Image>控件。