如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?
Posted
技术标签:
【中文标题】如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?【英文标题】:How is better save and load a picture on c# (asp.net) and SQL Server? 【发布时间】:2011-07-08 01:08:35 【问题描述】:我想保存图片,并在网格视图中显示它们的名称、描述、价格和其他内容,但我不知道该怎么做。首先,我应该如何上传图片?我目前正在使用 Windows 窗体应用程序来保存其他信息,但我现在还需要保存图像。这些图像需要从 ASP.NET 应用程序的网页中查看。
我认为我不需要保存路径,因为其他用户将通过他们计算机上的网页加载它。在数据库varbinary
或image
中使用的最佳格式是什么。我不确定如何使用这些或如何使它们在网格视图中可见。如果我有图像的路径,我确实知道该怎么做,但如果图像在数据库中,我就不知道了。
谁能告诉我如何将图像存储在数据库中,然后在网格视图中显示?
【问题讨论】:
很抱歉,这个问题写的让我头疼。即使英语不是您的第一语言,如果您希望得到高质量的答案,请花时间以合乎逻辑和连贯的方式提出您的问题。 关于 varbinary 和 image 区别的解释,请参见:***.com/questions/4113294/… 【参考方案1】:如果你想将它存储在数据库中,你应该使用varbinary
。它在功能上等同于image
列类型,但image
已被弃用,取而代之的是varbinary(MAX)
。通常,要使用数据库中的图像,您需要创建一个 HttpHandler(或者,如果使用 ASP.NET MVC,则为控制器/动作)来处理对与图像关联的标识符进行编码的 url,例如,http://www.example.com/imagehandler.ashx?id=42
。在这种情况下,处理程序会知道在数据库中找到 ID 为 42
的图像,并从对应于具有正确 MIME 类型的列内容的字节数组中构造一个响应。
示例代码:完全未经测试
public class ImageHandler: IHttpHandler
public void ProcessRequest (HttpContext context)
int imageID = -1;
if (context.Request.QueryString["id"] == null || !int.TryParse( context.Request.QueryString["id"], out imageID) )
throw new ArgumentException("Invalid or missing image id.");
using (var context = new ImagesDataContext())
var image = context.Images.SingleOrDefault( i => i.ID == imageID );
if (image != null)
context.Response.ContentType = image.MimeType;
context.Response.BinaryWrite( image.Content );
else
// decide how you want to handle an image that isn't found
public bool IsReusable
get return false;
【讨论】:
以上是关于如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net (C#) & SQL Server - 或者 - PHP & MySQL 的性能? [关闭]
如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?
如何使用 C# 从 ASP.NET 中的 SQL Server 数据库中检索和显示 GridView 中的值
如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中