在这里我整理一下关于如何把图片数据(或是其他文件的数据)如何存入数据库,并且实现从数据库读取现实在页面上。(这里用图片作为例子,实现图片的存入、读取然后在显示在一个网页指定位置)
/////////////////////////////////////////////////
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#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
/////////////////////////////////////////////////
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#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
http://msdn.microsoft.com/library/en-us/dnforms/html/winforms12182003.asp?frame=true
另外:
http://www.aspx.cn/article/go.asp?id=268&typeid=2
数据库中操作图片