在这里我整理一下关于如何把图片数据(或是其他文件的数据)如何存入数据库,并且实现从数据库读取现实在页面上。(这里用图片作为例子,实现图片的存入、读取然后在显示在一个网页指定位置)
/////////////////////////////////////////////////
插入图片的必要条件 
在我们开始上传之前,有两件重要的事我们需要做: 
#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

解决方案 »

  1.   

    这个是在grid中显示图片的程序
    http://msdn.microsoft.com/library/en-us/dnforms/html/winforms12182003.asp?frame=true
    另外:
    http://www.aspx.cn/article/go.asp?id=268&typeid=2
      

  2.   

    谢谢!图片虽然显示出来了,可DataList中显示的却是同一幅图片,怎样才能让DataList中显示数据库的表中不同的不同图片?焦急万分!望各位高手不吝赐教!
      

  3.   

    http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158
    数据库中操作图片