2011-07-08 20 views
0

我想保存图片,并用名称,描述,价格和其他东西在gridview中显示它们,但我不知道该怎么做。首先,我应该如何上传图片?我目前使用Windows Forms应用程序来保存其他信息,但我现在也需要保存图像。这些图像需要从ASP.NET应用程序的网页中查看。如何更好地保存和加载c#(asp.net)和SQL Server上的图片?

我不认为我需要保存路径,因为其他用户将通过他们的计算机上的网页加载它。在数据库varbinaryimage中使用什么最佳格式。我不知道如何使用这些或如何使它们在gridview中可见。如果我有图像的路径,我知道如何去做,但如果图像在数据库中则不知道。

任何人都可以告诉我如何将图像存储在数据库中,然后在gridview中显示它?

+0

我很抱歉,但这个问题的书面让我头痛。即使英语不是您的第一语言,如果您希望获得高质量的答案,请花时间以合理和一致的方式阐述您的问题。 – Yuck

+0

jajaja thanks @Yuck – angel

+1

有关varbinary和image之间区别的解释,请参阅:http://stackoverflow.com/questions/4113294/is-there-a-big-technical-difference-between-varbinarymax-and-image -data-类型/ 4113417#4113417 – kristian

回答

3

如果要将其存储在数据库中,则应使用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; } 
    } 
} 
相关问题