在asp.net中从sql server数据库显示图像的最佳方法是什么?

时间:2009-03-04 20:44:05

标签: asp.net sql-server image blob

我有一个sql server数据库,它返回图像的字节。如果我使用tableadapter向导并将其设置为我的存储过程和预览数据,它会拉回图像。它会自动将其转换为预览数据中的图像。我不认为它是一串Ints或任何东西。

如何使用gridview和objectdatasource在我的asp.net网页上显示它?

我已经搜索并调整了图像字段可以指向另一个执行字节转换的页面上的URL的位置,但我不确定它是最好的。我找到了另一种创建临时文件的方法。

只是想看看最好的方法。

编辑 - 我正在尝试不使用临时文件。如果我不能使用gridview,则可以使用常规图像字段。

asp.net 2.0,c#。

感谢您的帮助。

修改

结束于:

   protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request["id"];
        string connstr = "DSN=myserver";
        OdbcConnection conn = new OdbcConnection(connstr);
        OdbcCommand cmd = new OdbcCommand("{call mySP (?)}", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        OdbcParameter parameter = new OdbcParameter();
        parameter.ParameterName = "@MyParam";
        parameter.OdbcType = OdbcType.VarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = id;

        // Add the parameter to the Parameters collection. 
        cmd.Parameters.Add(parameter);
        conn.Open();
        OdbcDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            byte[] buffer = (byte[])dr[0];
            Response.ContentType = "image/jpg";
            Response.BinaryWrite(buffer);
            Response.Flush();
        }
    }

并在调用页面上显示:

<asp:Image ID="Image1" ImageAlign="Middle" ImageUrl="show.aspx?id=123" Runat="server" />

4 个答案:

答案 0 :(得分:4)

两个选项:

创建临时文件 - 这种方法的问题在于您必须创建文件,这意味着您的Web必须具有对目录的写访问权,这不是一件好事。您还需要一种方法来清理图像。

从其他网址提供服务 - 这是我首选的方法,因为您无需访问磁盘。一个简单的http处理程序(ashx)是提供图像的好方法。

修改

如果您需要在ashx中使用会话状态,请查看:Asp.net System.Web.HttpContext.Current.Session null in global.asax

修改

结合更多的想法。在某些情况下,使用临时文件可能会更好。例如,如果许多用户经常请求您的图像。然后将图像存储在磁盘上是有意义的,因为你可以编写一次文件,这确实增加了维护复杂性,但是根据流量可能是值得的,因为这样可以避免回调到.net堆栈并利用IIS缓存静态内容。

答案 1 :(得分:0)

Here是关于如何执行此操作的示例代码。

答案 2 :(得分:0)

您添加的示例代码很好,但您应将其移至.ashx文件,该文件适用于此类内容。

答案 3 :(得分:0)

我为SqlReader编写了open-source ImageResizing.Net library插件,允许您以最佳性能最佳方式提供和显示SQL数据库中的图像。

即使您不需要进行任何图像处理,它仍然是(a)最简单的,(b)最有效的方法。您可以将其与磁盘缓存(提供自动清理)结合使用,以获得可能的最佳性能。

Installation很简单 - 2个nuget命令,或者复制&amp;粘贴到Web.Config,你的选择。

如果您需要帮助,support是免费且快速的。