seeRetrieving Images from SqlServer and displaying in a DataGrid - ASP .NET
http://aspalliance.com/das/datagridimages.aspx

解决方案 »

  1.   

    在这个字段中存你的图片的地址(eg: images/aa1.gif)
      

  2.   

    大致的思路是将图片转换为大二进制数据,再保存在SQL中,
    打开的时候又再将二进制数转换成图形文件,
    网上有很多的例子的,自己找找啦.
      

  3.   

    这个问题前些日子我问过。
    下面是上传图片(直接进入数据库)
    protected System.Web.UI.HtmlControls.HtmlInputFile DOC_File;Stream imgStream;
    int imgLen;
    string imgName_value;
    string imgContentType;
    string imgUploadedName;
    //获取文件IO对象,准备上传
    imgStream  = DOC_File.PostedFile.InputStream;
    //获得文件大小
    imgLen =  DOC_File.PostedFile.ContentLength;
    //获得客户端文件名
    imgUploadedName = DOC_File.PostedFile.FileName;
    byte[] imgBinaryData=new byte[imgLen];
    //获得文件类型
    imgContentType = DOC_File.PostedFile.ContentType;int n = imgStream.Read(imgBinaryData, 0, imgLen);          
    //写入数据库
    int NumRowsAffected = 插入数据库函数
    if(NumRowsAffected > 0)
    Mess.Text="上传成功";
    else
    Mess.Text="上传失败";输出:
    如果是用DataGrid,看上面答复这是spring_ok给我的答复
    <img src=showimg.aspx?id=123>
    showimg.aspx 中用 Response.BinaryWrite((byte[])dr["图像之段"]);来输出图片。
      

  4.   

    我问的问题现已经解决了,关于图片往数据库存取的帖子不少,但是FAQ里面没有关于这方面的东西,我就整理出来方便大家,如果有什么不足的地方请多指正。
    ---------------------------------------------------------------------------------------------
    在这里我整理一下关于如何把图片数据(或是其他文件的数据)如何存入数据库,并且实现从数据库读取现实在页面上。(这里用图片作为例子,实现图片的存入、读取然后在显示在一个网页指定位置)
    /////////////////////////////////////////////////
    插入图片的必要条件 
    在我们开始上传之前,有两件重要的事我们需要做: 
    #Form 标记的 enctype 属性应该设置成 enctype="multipart/form-data" 
    #需要一个<input type=file>表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象 同时我们需要对SqlServer做以下的准备:
    在SQL Server中建立一个图片存储的数库表,Imgdata Column为图象二进制数据储存字段,imgtypeColumn为图象文件类型记录字段,结构如下:
    CREATE TABLE [dbo].[ImageStore] 
      (
        [ImageID] [int] IDENTITY (1, 1) NOT NULL ,
        [Imgdata] [image] NULL ,                             
        [imgtype] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
      ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    ///////////////////////////////////////////////////////
    ///存入数据库
    ///////////////////////////////////////////////////////
    using System;
    using System.IO;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace HNANetAdmin
    {
    /// <summary>
    /// 图片插入数据库。
    /// Author: zhou_min
    /// Date: 2002-10-24
    /// </summary>
    public class AddImage : System.Web.UI.Page
    {
      protected System.Web.UI.WebControls.Button Button1;
      protected System.Web.UI.HtmlControls.HtmlInputFile File1;

      private void Page_Load(object sender, System.EventArgs e)
      {
         // 在此处放置用户代码以初始化页面
      }  #region Web Form Designer generated code
      override protected void OnInit(EventArgs e)
      {
        //
        // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
      }

      private void InitializeComponent()
      {    
      this.Button1.Click += new System.EventHandler(this.Button1_Click);
      this.Load += new System.EventHandler(this.Page_Load);  }
      #endregion  private void Button1_Click(object sender, System.EventArgs e)
      {
        Stream imgdatastream = File1.PostedFile.InputStream;//读取数据流
        int imgDataLen = File1.PostedFile.ContentLength;//图片长度
        string imgType = File1.PostedFile.ContentType;//图片类型

        byte[] imgData = new byte[imgDataLen];//临时存放图片二进制数组
        imgdatastream.Read(imgData,0,imgDataLen);//图片二进制放入临时数组

        //调用函数把图片二进制文件插入数据库
        InsertImgData(imgType,imgData);
      }    private void InsertImgData(string imgType,byte[] imgData)
      {
        //数据库连接
        string connstr="Data Source=10.2.10.34;database=pubs;uid=sa;pwd=sa;";
        SqlConnection connection = new SqlConnection(connstr);    //插入语句
        SqlCommand command = new SqlCommand("INSERT INTO ImageStore(imgtype,imgdata)VALUES ( @imgtype,@imgdata )", connection );

        //插入参数
        SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
        paramData.Value = imgData;
        command.Parameters.Add( paramData );
        SqlParameter paramType = new SqlParameter( "@imgtype", SqlDbType.VarChar,50 );
        paramType.Value = imgType;
        command.Parameters.Add( paramType );

        //打开连接
        connection.Open();
        //执行插入
        command.ExecuteNonQuery();
        //关闭连接
        connection.Close();
        }
      }
    }
    ///////////////////////////////////////////////////////
    ///取出图片
    //////////////////////////////////////////////////////
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace HNANetAdmin
    {
    /// <summary>
    /// 显示数据库中图片。
    ///Author: zhou_min
    /// Date: 2002-10-24
    /// </summary>
    public class DisplayImg : System.Web.UI.Page
     {
       private void Page_Load(object sender, System.EventArgs e)
       {
         if(!Page.IsPostBack)
           Display();
       }   private void Display()
       {
         string imgid =Request.QueryString["imgid"];//显示图片Id     //数据库连接
         string connstr="Data Source=10.2.10.34;database=pubs;uid=sa;pwd=sa;";
         string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = '"+ imgid + "'";
         SqlConnection connection = new SqlConnection(connstr);
         SqlCommand command = new SqlCommand(sql, connection);
         connection.Open();
         SqlDataReader dr = command.ExecuteReader();     //显示图片
         if(dr.Read())
           {
           Response.ContentType = dr["imgtype"].ToString();
           Response.BinaryWrite( (byte[]) dr["imgdata"] );
           }       //关闭连接
           connection.Close();
         }     #region Web Form Designer generated code
         override protected void OnInit(EventArgs e)
         {
           //
           // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
           //
           InitializeComponent();
           base.OnInit(e);
         }

           /// <summary>
           /// 设计器支持所需的方法 - 不要使用代码编辑器修改
           /// 此方法的内容。
           /// </summary>
           private void InitializeComponent()
            {    
           this.Load += new System.EventHandler(this.Page_Load);
            }
           #endregion
       }
    }
    ////////////////////////////////////////////////
    ////在一个页面指定显示位置
    ////////////////////////////////////////////////从数据库取出来的图片在wfmDisplayImage.aspx实现了显示,现在我所做的工作就是要绑定图片到DataList上如下程序:
    <asp:DataList id="dlDisplayImage" runat="server">
       <ItemTemplate>
          <img src='wfmDisplayImage.aspx?cncCode=<%# DataBinder.Eval(Container.DataItem,"cncCode")%>' />
      </ItemTemplate>
    </asp:DataList>
    可是我运行时提示“Compiler Error Message: CS1010: Newline in constant”
    请问一下会在哪里出问题呢,有什么解决方法呢?
    --------------------------------------------------------------------
    后台的代码如下:
    DataRow drHuman = dsHuman.Tables["dtRetu"].Rows[0];
    drHuman["cncCode"] = drHuman["cncCode"].ToString().Trim();
    dlDisplayImage.DataSource = drHuman;
    dlDisplayImage.DataBind();
      

  5.   

    参考如下帖子:
    http://expert.csdn.net/Expert/topic/1179/1179456.xml?temp=.550091
    http://expert.csdn.net/Expert/topic/1179/1179456.xml?temp=.1079218
      

  6.   

    这个我依照网上的做了一个,思路与上面一样,但在display.aspx.cs中是
    Response.ContentType = dr["Pic_type"].ToString();
           Response.BinaryWrite( (byte[]) dr["New_pic"] );
    在display.aspx中显示为System.byte[];
     怎么把最后的结果传给<img src=>属性呢?这里不用datagrid因为显示的是新闻的图片,一行行排列下来就行了..
      

  7.   

    现在图片是可以显示出来了,但还有一个问题:一个页面只能放图片,我要搞一个新闻系统,除了图片,还有内容都要在一个页面显示,那怎么定位图片
    把Response.BinaryWrite( (byte[]) dr["New_pic"] );与<img>挂钩,
    html和web的img控件我都没试成功????