【问题标题】:Displaying Database Images in Gridview with HttpHandler使用 HttpHandler 在 Gridview 中显示数据库图像
【发布时间】:2023-04-11 07:01:02
【问题描述】:

我正在尝试使用 ashx 页面作为存储在 SQL 服务器数据库中的图像的 http 处理程序。这些图像将显示在 aspx 页面上的网格视图中。

<%@ WebHandler Language="C#" Class="LinqHandler" %>

using System;
using System.Web;
using System.Drawing.Imaging;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;


public class LinqHandler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        SqlConnection connect = new SqlConnection();
        connect.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

        SqlCommand command = new SqlCommand();
        command.CommandText = "SELECT roomID,roomNumber,roomImage1 FROM Rooms " 
                              + "WHERE roomID = @roomID";
        command.CommandType = System.Data.CommandType.Text;
        command.Connection = connect;

        SqlParameter RoomID = new SqlParameter("@roomID", System.Data.SqlDbType.Int);
        RoomID.Value = context.Request.QueryString["roomID"];
        command.Parameters.Add(RoomID);
        connect.Open();
        SqlDataReader dr = command.ExecuteReader();
        dr.Read();
        context.Response.BinaryWrite((byte[])dr["roomImage1"]);
        context.Response.ContentType = "image/gif";
        dr.Close();
        connect.Close();
    }

    public bool IsReusable {
        get {
          return false;
        }
    }
}

由于某种原因,图像没有绑定到 aspx 页面上的 asp:Image 控件。我不知道为什么。

这里是数据绑定sn-p:

<asp:GridView ID="GridView1" runat="server"
    CssClass="gridviews" PagerStyle-CssClass="pager"
    DataKeyNames="roomID"  AlternatingRowStyle-CssClass="alt"
    AutoGenerateColumns="False"   DataSourceID="SqlDataSource1">
   <Columns>
     <asp:BoundField DataField="roomID" HeaderText="roomID" />
     <asp:BoundField DataField="roomNumber" HeaderText="Room Number" />
     <asp:TemplateField HeaderText="Image 1">
        <ItemTemplate>
          <asp:Image runat="server" ID="pic1" 
              ImageUrl='<%# "~/LinqHandler.ashx?roomID=" + Eval("roomID") %>'>
          </asp:Image>
        </ItemTemplate>
     </asp:TemplateField>
   </Columns>
</asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     SelectCommand="SELECT [roomID], [roomNumber], [roomImage1] FROM [Rooms]">
</asp:SqlDataSource>

【问题讨论】:

  • 如果您还需要 aspx 标记,请告诉我。谢谢!
  • 您可以从您的标记中发布相关的数据绑定 sn-p 吗?
  • 这是我过去回答的一个类似问题:stackoverflow.com/questions/9048334/…

标签: c# asp.net image httphandler


【解决方案1】:

您可以使用 Handler.ashx 来显示图像。例如:

<img src="Handler.ashx?roomID=1" />

这样可以显示一号房间的图片。

如果你想换一种方式,你可以在 css 中使用 base64。你不需要使用处理程序。例如:

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

//code behind
var bytes = (byte[])dr["roomImage1"]);
var base64String = System.Convert.ToBase64String(bytes, 0, bytes.Length);
image.src = "data:image/gif;base64,"+ base64String;

编辑:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var bytes = (byte[])((DataRow)e.Row.DataItem)["roomImage1"];
        var base64String = System.Convert.ToBase64String(bytes, 0, bytes.Length);
        var image = (Image)e.Row.FindControl("pic1");
        image.ImageUrl = "data:image/gif;base64,"+ base64String;
        //or
        image.ImageUrl = "LinqHandler.ashx?roomID="+((DataRow)e.Row.DataItem)["roomID"];
    }
}

【讨论】:

  • 谢谢你,但我想动态显示这些图像,因此 ImageUrl 属性中的 Eval() 语句。
  • 编辑了我的答案。你可能会有所帮助。
【解决方案2】:

尝试如下:

  <ItemTemplate>
    <asp:Image ID="pic1" runat="server" 
        ImageUrl='<%# Eval("roomID", "LinqHandler.ashx?roomID={0}") %>' 
        Height="100px" Width="80px" />
  </ItemTemplate>

【讨论】:

    【解决方案3】:

    事实证明,我的问题源于在我的 SQL BLOB 字段中插入垃圾。我的源代码中发布的检索机制没有任何问题。如果您对我使用的插入语句感到好奇,请告诉我,我很乐意发布它们。

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 2012-11-06
      • 1970-01-01
      • 2016-04-29
      • 2021-05-31
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多