C# 使用HttpHandler在Gridview中显示数据库图像

C# 使用HttpHandler在Gridview中显示数据库图像,c#,asp.net,image,httphandler,C#,Asp.net,Image,Httphandler,我试图使用ashx页面作为存储在SQL server数据库中的图像的http处理程序。这些图像将显示在aspx页面的gridview中 <%@ WebHandler Language="C#" Class="LinqHandler" %> using System; using System.Web; using System.Drawing.Imaging; using System.Collections.Generic; using System.Data.SqlClient

我试图使用ashx页面作为存储在SQL server数据库中的图像的http处理程序。这些图像将显示在aspx页面的gridview中

<%@ 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;
        }
    }
}

使用制度;
使用System.Web;
使用系统、绘图、成像;
使用System.Collections.Generic;
使用System.Data.SqlClient;
使用系统配置;
使用System.IO;
公共类LinqHandler:IHttpHandler{
公共void ProcessRequest(HttpContext上下文)
{
SqlConnection connect=新的SqlConnection();
connect.ConnectionString=ConfigurationManager.ConnectionString[“ConnectionString”].ConnectionString;
SqlCommand=newsqlcommand();
command.CommandText=“从房间中选择roomID、roomNumber、roomImage1”
+“其中roomID=@roomID”;
command.CommandType=System.Data.CommandType.Text;
command.Connection=connect;
SqlParameter RoomID=newsqlparameter(“@RoomID”,System.Data.SqlDbType.Int);
RoomID.Value=context.Request.QueryString[“RoomID”];
command.Parameters.Add(RoomID);
connect.Open();
SqlDataReader dr=command.ExecuteReader();
里德博士();
context.Response.BinaryWrite((字节[])dr[“roomImage1”]);
context.Response.ContentType=“image/gif”;
Close博士();
connect.Close();
}
公共布尔可重用{
得到{
返回false;
}
}
}
由于某些原因,这些图像没有绑定到aspx页面上的asp:Image控件。我不明白为什么

以下是数据绑定片段:

<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>

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

<img src="Handler.ashx?roomID=1" />
<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;

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

<img src="Handler.ashx?roomID=1" />
<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;
请尝试以下操作:

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

尝试以下操作:

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


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

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

如果您还需要aspx标记,请告诉我。谢谢你能从你的标记中发布相关的数据绑定片段吗?我以前回答过一个类似的问题:如果你也需要aspx标记,请告诉我。谢谢你能从你的标记中发布相关的数据绑定片段吗?这里有一个我以前回答过的类似问题:谢谢你,但我想动态显示这些图像,从而在ImageUrl属性中显示Eval()语句。编辑了我的答案。您可能会有所帮助。谢谢您,但我希望动态显示这些图像,因此ImageUrl属性中的Eval()语句已编辑我的答案。你可能会有所帮助。