快速业务通道

ASP.NET使用Gridview绑定数据库中的图片

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章。

我们都知道,在Gridview中不能直接去绑定数据库中的图片,我们可以利用HttpHandler很容易的完成这个任务,在这里我记录一下这个过程。

1.上传图片存储到数据库中

在数据库中创建一个表,添加一下3个字段:

ASP.NET使用Gridview绑定数据库中的图片

步骤一:在Web页面中拖一个FileUpload 控件,一个文本框用于输入名称和提交上传按钮

<asp:FileUpload ID="fuImage" runat="server" /><br />
<asp:TextBox ID="txtImageName" runat="server"/><br />
<asp:Button ID="btnUpload" runat="server"
OnClick="btnUpload_Click" Text="Upload" />

步骤二:在Web.Config文件内配置连接字符串。

<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\Image.mdf;Integrated Security=True;
User Instance=True" providerName="System.Data.SqlClient"/>

步骤三:把下面的代码复制到上传按钮事件中。

protected void btnUpload_Click(object sender, EventArgs e)
{
   Stream imgStream = fuImage.PostedFile.InputStream;
   int imgLen = fuImage.PostedFile.ContentLength;
   string imgName = txtImageName.Text;
   byte[] imgBinaryData = new byte[imgLen];
   int n = imgStream.Read(imgBinaryData,0,imgLen);
   //use the web.config to store the connection string
   SqlConnection connection = new SqlConnection(ConfigurationManager.
   ConnectionStrings["connectionString"].ConnectionString);
   SqlCommand command = new SqlCommand(
   "INSERT INTO Image (imagename,image)
   VALUES ( @img_name, @img_data)", connection);
   SqlParameter param0 = new SqlParameter(
   "@img_name",SqlDbType.VarChar, 50);
   param0.Value = imgName;
   command.Parameters.Add(param0);
   SqlParameter param1 = new SqlParameter(
   "@img_data", SqlDbType.Image);
   param1.Value = imgBinaryData;
   command.Parameters.Add(param1);
   connection.Open();
   int numRowsAffected = command.ExecuteNonQuery();
   connection.Close();
}

2.利用HttpHandler从数据库中读取图片

创建一个名为ImageHandler.ashx的HttpHandler从数据库中读取图片,通过imageID这个参数调用其方法显示图片。像这样:ImageHandler.ashx?ImID=200

步骤四:书写ImageHandler.ashx文件代码如下:

public class ImageHandler : IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
     string imageid = context.Request.QueryString["ImID"];
     SqlConnection connection =
       new SqlConnection(ConfigurationManager.
       ConnectionStrings["connectionString"].ConnectionString);
     connection.Open();
     SqlCommand command = new SqlCommand(
       "select Image from Image where ImageID=" + imageid,
       connection);
     SqlDataReader dr = command.ExecuteReader();
     dr.Read();
     context.Response.BinaryWrite((Byte[])dr[0]);
     connection.Close();
     context.Response.End();
   }
   public bool IsReusable

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号