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

简介:

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

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

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

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

创建一个表

步骤一:在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
    {
        get{return false;}
    }
}

3.绑定Gridview控件

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

SqlConnection connection = new SqlConnection(ConfigurationManager.
ConnectionStrings["connectionString"].ConnectionString);
SqlCommand command = new SqlCommand("SELECT imagename,ImageID
from [Image]", connection);
SqlDataAdapter ada = new SqlDataAdapter(command);       
DataTable dt = new DataTable();
ada.Fill(dt);
gvImages.DataSource = dt;
gvImages.DataBind();

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

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

4.上传图片,并显示

显示通过!

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



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2011/05/07/2039930.html,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
数据库 数据安全/隐私保护
winform通过ListView绑定数据库数据源
winform通过ListView绑定数据库数据源
winform通过ListView绑定数据库数据源
|
5月前
|
关系型数据库 MySQL 数据库
第十四章 演示MYSQL自定义values.yaml绑定PV和PVC和数据库用户密码
第十四章 演示MYSQL自定义values.yaml绑定PV和PVC和数据库用户密码
73 0
|
5月前
|
数据安全/隐私保护 时序数据库
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
382 0
|
存储 Java 应用服务中间件
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
692 0
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
|
27天前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
5月前
|
PHP 数据库
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-2
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
5月前
|
存储 PHP Apache
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-1
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
5月前
|
存储 PHP Apache
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床
|
SQL 数据库连接 数据库
刘金玉的零基础VB教程083期:mshflexgrid数据表格绑定数据库
刘金玉的零基础VB教程083期:mshflexgrid数据表格绑定数据库
129 1
|
SQL 数据库 C#
C#中将DataGrid绑定到SQL Server数据库,显示数据库中的数据
C#中将DataGrid绑定到SQL Server数据库,显示数据库中的数据
C#中将DataGrid绑定到SQL Server数据库,显示数据库中的数据