2013-07-10 56 views
-2

我将图像数据存储在SQL Server数据库表中。这是我的表结构使用C#检索存储在SQL Server中的图像

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

我创建了一个存储过程使用输出参数检查,如果用户是我想要检索回一个有效的用户或不

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显示图像。

感谢

+3

@interlude这甚至意味着什么? –

+0

您是否能够成功执行代码中存储的proc并查看@imagedata的值? – RQDQ

+0

@RQDQ:嗨,我能够执行SQL服务器中的过程 数据显示为以下格式'0xFFD8FFE000104A46494600010101009600960000 ....' –

回答

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

这将调用与名字“约翰”和姓“史密斯”的图像处理程序。图像处理程序将提供表示图像的字节。

+0

谢谢......那帮了:) –

相关问题