使用C#ASP.NET。我有转发器控件的问题。我想在存储在数据库中的页面上显示图像。我从northwind数据库收集信息。
类别表
SQL语法:
CREATE TABLE [dbo].[Categories](
[CategoryID] [int] IDENTITY(1,1) NOT NULL,
[CategoryName] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Description] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Picture] [image] NULL)
在页面加载 C#语法:
NorthWindDataContext db = new NorthWindDataContext();
List<Category> oList = new List<Category>();
oList = db.Categories.ToList();
Repeater1.DataSource = oList;
aspx语法:
<ItemTemplate>
<tr>
<td>
<%#DataBinder.Eval(Container, "DataItem.Picture")%>
</td>
</tr>
</ItemTemplate>
运行代码后,在我的页面中我没有得到图片。帮助我在我的页面上获取图片。提前谢谢。如果有任何疑问请问。
答案 0 :(得分:2)
您将图像存储为数据库中的二进制数据,因此无法按原样显示。
从0到2 ^ 31-1(2,147,483,647)的可变长度二进制数据 字节。
常见的方法是从内存流中创建System.Drawing.Image
的实例,然后在响应中显式写入它。此功能应由ASHX处理程序包装。有关示例,请参阅intrawebs,有很多。
下面的Handler伪代码:(然后在ASPX中只是reffer处理程序)
IEnuemrable<byte> binaryImageData = queryExecutor.GetImageData(imageId);
// do not forget to dispose or use 'using'
var memoryStream = new MemoryStream();
memoryStream.Write(imageByte, 0, binaryImageData.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream);
// ... create JPEG
context.Response.ContentType = "image/jpeg";
jpegImage.Save(context.Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Jpeg);
我发现的好例子: