当前位置:首页 > ASP.NET技巧:使用Gridview绑定数据库中的图片

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

点击次数:1231  更新日期:2010-12-30
\n

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

\n

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


\n

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


\n

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


\n

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


\n

创建一个表


\n

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

<asp:FileUpload ID=”fuImage” runat=”server” /><br />
\n<asp:TextBox ID=”txtImageName” runat=”server”/><br />
\n<asp:Button ID=”btnUpload” runat=”server” onClick=”btnUpload_Click” Text=”Upload” />

\n

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

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

\n

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

protected void btnUpload_Click(object sender, EventArgs e)
\n{
\n Stream imgStream = fuImage.PostedFile.InputStream;
\n int imgLen = fuImage.PostedFile.ContentLength;
\n string imgName = txtImageName.Text;
\n byte[] imgBinaryData = new byte[imgLen];
\n int n = imgStream.Read(imgBinaryData,0,imgLen);

\n

//use the web.config to store the connection string
\n SqlConnection connection = new SqlConnection(ConfigurationManager.
\n ConnectionStrings["connectionString"].ConnectionString);
\n SqlCommand command = new SqlCommand(“INSERT INTO Image (imagename,image)
\n VALUES ( @img_name, @img_data)”, connection);

\n

SqlParameter param0 = new SqlParameter(“@img_name”, SqlDbType.VarChar, 50);
\n param0.Value = imgName;
\n command.Parameters.Add(param0);

\n

SqlParameter param1 = new SqlParameter(“@img_data”, SqlDbType.Image);
\n param1.Value = imgBinaryData;
\n command.Parameters.Add(param1);

\n

connection.Open();
\n int numRowsAffected = command.ExecuteNonQuery();
\n connection.Close();
\n}


\n

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


\n

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


\n

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

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

\n

public bool IsReusable
\n {
\n get{return false;}
\n }
\n}


\n

3.绑定Gridview控件


\n

步骤五:拖一个Gridview控件到页面上,并将其命名为gvImages。用下面代码来绑定数据。

SqlConnection connection = new SqlConnection(ConfigurationManager.
\nConnectionStrings["connectionString"].ConnectionString);
\nSqlCommand command = new SqlCommand(“SELECT imagename,ImageID
\nfrom [Image]“, connection);
\nSqlDataAdapter ada = new SqlDataAdapter(command);
\nDataTable dt = new DataTable();
\nada.Fill(dt);
\ngvImages.DataSource = dt;
\ngvImages.DataBind();

\n

步骤六:设置Gridview控件的绑定列,其HTML代码如下:

<asp:GridView Width=”500px” ID=”gvImages” runat=”server”
\n AutoGenerateColumns=”False” >
\n <Columns>
\n <asp:BoundField HeaderText = “Image Name” DataField=”imagename” />
\n <asp:TemplateField HeaderText=”Image”>
\n <ItemTemplate>
\n <asp:Image ID=”Image1″ runat=”server”
\n ImageUrl=’<%# “ImageHandler.ashx?ImID=”+ Eval(“ImageID”) %>’/>
\n </ItemTemplate>
\n </asp:TemplateField>
\n </Columns>
\n</asp:GridView>

\n

4.上传图片,并显示

显示通过!
\n

OK!测试通过!还有其它一些显示图片的方法。但是我认为这个比较简单


\n

作者:李永京YJingLee’s Blog
出处:http://lyj.cnblogs.com

\n