使用C#检索存储在SQL Server中的图像

时间:2013-07-10 15:04:35

标签: c# asp.net sql-server

我将图像数据存储在SQL Server数据库表中。这是我的表结构

create table userimages
(ID integer identity(1,1),
boardingpass varbinary(max));
go

我创建了一个存储过程,在检查用户是否是有效用户后使用out参数返回图像

alter procedure return_userimage(@firstname char(100) , @lastname char(100), @imagedata varbinary(max) out)
 as
 begin
    declare @result int

    exec @result = usp_validatuser @firstname, @lastname

    if(@result = 1)
    begin
       declare @userid int

       select @userid = ID 
       from tbl_UserInformation 
       where FirstName = @firstname and LastName = @lastname

       select @imagedata = boardingpass 
       from userimages 
       where ID = @userid 
    end
  else
  begin
     return 0
  end
end

我想要检索图像并使用ASP图像控件显示它。请引导调用存储过程所需的代码并使用c#,ASP。

显示图像

由于

1 个答案:

答案 0 :(得分:2)

首先应该考虑的事情很少 - 存储图像类型(是png,bmp,tiff)。我只是假设一切都将是jpeg。也许还可以学习一些关于ASP.NET基础知识的东西 - 我真诚地希望你知道如何打开与数据库的连接。

您必须创建HttpHandler - 让我们在您的Web应用程序的根目录中将其称为ImageHandler.ashx。

代码将是:

public class ImageHandler : IHttpHandler {
  public bool IsReusable {
    get { return false; }
  }

  public void ProcessRequest(HttpContext context) {
    string firstName = context.Request.QueryString["FirstName"];
    string lastName = context.Request.QueryString["LastName"];
    context.Response.ContentType = "image/jpeg";

    using (var conn = new SqlConnection(@"SERVER=.\SQL2008;Database=Test;Integrated Security=True")) 
    {
      using(var cmd = new SqlCommand("return_userimage", conn))
      {
        cmd.Parameters.Add("@firstname", SqlDbType.Char, 100).Value = firstName;
        cmd.Parameters.Add("@lastname", SqlDbType.Char, 100).Value = lastName;
        var paramImage = cmd.Parameters.Add("@imagedata", SqlDbType.VarBinary);
        paramImage.Direction = ParameterDirection.Output;
        conn.Open();
        cmd.ExecuteNonQuery();
        if (paramImage.Value != null && paramImage.Value != DBNull.Value) {
          byte[] buffer = (byte[])paramImage.Value;
          context.Response.OutputStream.Write(buffer, 0, buffer.Length);
        }
      }
    }
  }
}

这将提供图像。然后在你的.aspx或.ascx页面中,你可以这样说:

<asp:Image runat="server" 
  ImageUrl="~/ImageHandler.ashx?FirstName=John&LastName=Smith" />

这将使用名字“John”和姓氏“Smith”调用图像处理程序。图像处理程序将提供表示图像的字节。