使用C#检索存储在SQL Server中的映像
本文关键字:Server 映像 SQL 检索 存储 使用 | 更新日期: 2023-09-27 18:22:00
我将图像数据存储在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调用存储过程和显示图像所需的代码。
感谢
首先应该考虑的几件事是存储图像类型(是png、bmp还是tiff)。我只是假设一切都是jpeg。也许还可以学习一些ASP.NET的基础知识——例如,我真诚地希望您知道如何打开与数据库的连接。
您必须在web应用程序的根目录中创建HttpHandler,我们称之为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"的图像处理程序。图像处理程序将提供表示图像的字节。