如何将图片写进数据库[二进制格式] 我想用C#把一张图片写入SQL SERVER 2000中的一个二进制字段,如何实现,谢谢各位! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 读取图片文件的byte [] 字节流然后用ado.net insert 到数据就可以了最好先解析一下是什么格式的,将后图片文件的后缀名得到,一起存到数据库中以后还原成图片时用得到 呵呵,好像不那么简单,在网络中传输的信息,那么你得进行自编码,然后读出来时得重新编码,其实两个东西我觉得你可以参照以前asp的下载程序代码来写,我想那样应得行! /*首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下:CREATE TABLE [dbo].[ImageStore] ( [ImageID] [int] IDENTITY (1, 1) NOT NULL , [ImageData] [image] NULL , [ImageContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [ImageDescription] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL , [ImageSize] [int] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]*/ //UpLoadImage.aspx程序内容如下:<%@ Page Inherits="UploadImage.UploadImage" SRC="UpLoadImage.cs" Language="C#"%><HTML><title>上传图片</title><BODY bgcolor="#FFFFFF"><FORM ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1"><TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1" cellpadding="0" cellspacing="0" border="0"><TR> <TD>上传图片(选择你要上传的图片)</TD><TD><INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE"></TD></TR><TR> <TD> 文件说明(添加上传图片说明,如:作者、出处) </TD><TD><asp:TextBox RUNAT="server" WIDTH="239" ID="txtDescription" MAINTAINSTATE="false" /></TD></TR><TR><TD><asp:Label RUNAT="server" ID="txtMessage" FORECOLOR="red" MAINTAINSTATE="false" /></TD><TD><asp:Button RUNAT="server" WIDTH="239" ONCLICK="Button_Submit" TEXT="Upload Image" /></TD></TR></TABLE></FORM></BODY></HTML>//-------------------------------------------------------------------//UpLoadImage.cs程序内容如下:using System;using System.Web;using System.IO;using System.Data;using System.Data.SqlClient;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls; namespace UploadImage{ public class UploadImage : Page { protected HtmlInputFile UP_FILE; //HtmlControl、WebControls控件对象protected TextBox txtDescription;protected Label txtMessage;protected Int32 FileLength = 0; //记录文件长度变量 protected void Button_Submit(System.Object sender, System.EventArgs e) {HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性FileLength = UpFile.ContentLength; //记录文件长度 try {if (FileLength == 0) { //文件长度为零时txtMessage.Text = "<b>请你选择你要上传的文件</b>"; } else {Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组Stream StreamObject = UpFile.InputStream; //建立数据流对像//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度StreamObject.Read(FileByteArray,0,FileLength); //建立SQL Server链接SqlConnection Con = new SqlConnection("Data Source=Localhost;Initial Catalog=testdb;User ID=sa;Pwd=;");String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);CmdObj.Parameters.Add("@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar,50).Value = UpFile.ContentType; //记录文件类型//把其它单表数据记录上传CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = txtDescription.Text;//记录文件长度,读取时使用CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = UpFile.ContentLength;Con.Open();CmdObj.ExecuteNonQuery(); Con.Close();txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功}} catch (Exception ex) {txtMessage.Text = ex.Message.ToString();}}}} RxitRose(天恒) ( ) 信誉:99 2005-10-19 16:29:00 得分: 0 读取图片文件的byte [] 字节流然后用ado.net insert 到数据就可以了最好先解析一下是什么格式的,将后图片文件的后缀名得到,一起存到数据库中以后还原成图片时用得到 //保存图像到数据表//通过编辑DataSet来提交数据.private void Save_Click(Object sender, EventArgs e){ //从数据库得到DataSet. SqlConnection conn=new SqlConnection(connstr); SqlDataAdapter da=new SqlDataAdapter(sql,conn); DataSet ds=new DataSet(); da.Fill(ds,"tblFile"); //建一个新行 DataRow row=ds.Tables["tblFile"].NewRow(); row["title"]="aaaaa"; //filMyFile为上传控件 if(filMyFile.PostedFile!=null){ HttpPostedFile myFile=filMyFile.PostedFile; int nFileLen=myFile.ContentLength; byte[] myData=new byte[nFileLen]; myFile.InputStream.Read(myData,0, nFileLen); row["picsize"]=myData.Length; //将字节数组赋值image型字段. row["pic"] =myData; } DateTime now=DateTime.Now; row["addtime"]=now.ToShortDateString(); //将此行加入表中. dt.Rows.Add(row); //更新数据源 SqlCommandBuilder cb=new SqlCommandBuilder(da); da.Update(ds,"tblFile");} http://singlepine.cnblogs.com/articles/288027.html 存;private void uploadimage(HtmlInputFile file){SqlConnection conn=new SqlConnection (Helper.GetConnectionString ());try{int pos =file.PostedFile .FileName .LastIndexOf ("\\");string filename=file.PostedFile .FileName .Substring (++pos);byte[] buffer=Helper.fileUpload (file,512000000,"image");SqlCommand cmd =new SqlCommand("imageAdd",conn);cmd.CommandType=CommandType.StoredProcedure ;SqlParameter p0=new SqlParameter ("@filename",SqlDbType.VarChar,256);p0.Value =filename;SqlParameter p1=new SqlParameter ("@filecontent",SqlDbType.Image);p1.Value =buffer;SqlParameter p2=new SqlParameter ("RETURN_VALUE",SqlDbType.Int );p2.Direction =ParameterDirection.ReturnValue ;cmd.Parameters .Add (p0);cmd.Parameters .Add (p1);cmd.Parameters .Add (p2);conn.Open ();cmd.ExecuteNonQuery();int id=(int)cmd.Parameters ["RETURN_VALUE"].Value ;tb1.Text+="\n";if(!tb1.Visible)tb1.Visible =true;}====================================取:if(Request.Params ["id"]!=null){SqlConnection conn=new SqlConnection (Helper.GetConnectionString ());try{SqlCommand cmd=new SqlCommand ("imageGet",conn);cmd.CommandType =CommandType.StoredProcedure ;cmd.Parameters .Add ("@id",SqlDbType.Int ).Value=Request.QueryString ["id"].Trim ();conn.Open ();SqlDataReader dr=cmd.ExecuteReader (CommandBehavior.CloseConnection);dr.Read ();byte[] buffer=(byte[])dr.GetSqlBinary (1);dr.Close ();Response.Clear ();Response.AddHeader ("content-length",buffer.Length .ToString ());Response.BinaryWrite (buffer);Response.End ();}catch(SqlException sqlex){Response.Write ("Erorr:"+sqlex.Message +"\n");}catch(Exception ex){Response.Write ("Erorr:"+ex.Message +"\n");}finally{if(conn.State !=ConnectionState.Closed )conn.Close ();} 简单的过程sql="insert into data1(data1,[name],[time]) values(@data1,'asdfasd','"+DateTime.Now+"')"; public bool file(string sql,string txt) { try { FileStream fs; fs = new FileStream(txt,FileMode.OpenOrCreate,FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] blob = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); conn.Open(); OleDbCommand cmd=new OleDbCommand(sql,conn); OleDbParameter param = new OleDbParameter("@data1",OleDbType.VarBinary,blob.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, blob); cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); return true; } catch(Exception e) { return false; } finally { conn.Close(); } } //把图片读到pictureBox,再写入数据库SqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");conn.Open();SqlCommand cmd=new SqlCommand("insert into fuser values ('1a','1b',@i)",conn);byte[] ib=new Byte[60000];FileStream fs=new FileStream(@"D:\windows temp\temp\1.jpg",FileMode.Open ,FileAccess.Read );fs.Read(ib,0,60000);cmd.Parameters.Add("@i",SqlDbType.Image,(int)fs.Length);cmd.Parameters["@i"].Value=ib;cmd.ExecuteNonQuery();conn.Close();-------------------------------------------------------//从数据库读图片到pictureboxSqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");conn.Open();SqlCommand cmd=new SqlCommand("select 照片 from fuser where password='1b'",conn);SqlDataReader reader=cmd.ExecuteReader();reader.Read();MemoryStream buf=new MemoryStream((byte[])reader[0]);Image image=Image.FromStream(buf,true);pictureBox1.Image=image; How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NEThttp://support.microsoft.com/default.aspx?scid=kb;EN-US;309158 求助:GDI+ 绘制直线,没显示出来 C# 关于图形对象的匹配!比如我想在一堆图形中找到正方形和其内切圆组成的图形对象! 最小内存区间取内容 预定事件 关于catch 合并8位二进制码为1位10进制码的最优算法 DataTable 中的数据导出形成另一个小DataTable 急!.net操作数据库的问题,解答立即给分 如何指定IP来访问 服务组件 怎样得到应用程序路径? 调试存储过程错误,帮我看看 c#中如何使用Microsoft.SharePoint这个类,应该添加那个Renferences?
最好先解析一下是什么格式的,将后图片文件的后缀名得到,一起存到数据库中
以后还原成图片时用得到
首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下:
CREATE TABLE [dbo].[ImageStore] (
[ImageID] [int] IDENTITY (1, 1) NOT NULL ,
[ImageData] [image] NULL ,
[ImageContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ImageDescription] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[ImageSize] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
*/ //UpLoadImage.aspx程序内容如下:
<%@ Page Inherits="UploadImage.UploadImage" SRC="UpLoadImage.cs" Language="C#"%>
<HTML><title>上传图片</title>
<BODY bgcolor="#FFFFFF">
<FORM ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1">
<TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1" cellpadding="0" cellspacing="0" border="0">
<TR>
<TD>上传图片(选择你要上传的图片)</TD>
<TD>
<INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE">
</TD>
</TR>
<TR>
<TD>
文件说明(添加上传图片说明,如:作者、出处)
</TD>
<TD>
<asp:TextBox RUNAT="server" WIDTH="239" ID="txtDescription" MAINTAINSTATE="false" />
</TD>
</TR>
<TR>
<TD>
<asp:Label RUNAT="server" ID="txtMessage" FORECOLOR="red" MAINTAINSTATE="false" />
</TD>
<TD>
<asp:Button RUNAT="server" WIDTH="239" ONCLICK="Button_Submit" TEXT="Upload Image" />
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
//-------------------------------------------------------------------
//UpLoadImage.cs程序内容如下:
using System;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace UploadImage
{
public class UploadImage : Page {
protected HtmlInputFile UP_FILE; //HtmlControl、WebControls控件对象
protected TextBox txtDescription;
protected Label txtMessage;
protected Int32 FileLength = 0; //记录文件长度变量
protected void Button_Submit(System.Object sender, System.EventArgs e) {
HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性
FileLength = UpFile.ContentLength; //记录文件长度
try {
if (FileLength == 0) { //文件长度为零时
txtMessage.Text = "<b>请你选择你要上传的文件</b>";
} else {
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = UpFile.InputStream; //建立数据流对像
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray,0,FileLength);
//建立SQL Server链接
SqlConnection Con = new SqlConnection("Data Source=Localhost;Initial Catalog=testdb;User ID=sa;Pwd=;");
String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;
CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar,50).Value = UpFile.ContentType; //记录文件类型
//把其它单表数据记录上传
CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = txtDescription.Text;
//记录文件长度,读取时使用
CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = UpFile.ContentLength;
Con.Open();
CmdObj.ExecuteNonQuery();
Con.Close();
txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
}
} catch (Exception ex) {
txtMessage.Text = ex.Message.ToString();
}}}}
读取图片文件的byte [] 字节流然后用ado.net insert 到数据就可以了
最好先解析一下是什么格式的,将后图片文件的后缀名得到,一起存到数据库中
以后还原成图片时用得到
//通过编辑DataSet来提交数据.
private void Save_Click(Object sender, EventArgs e)
{
//从数据库得到DataSet.
SqlConnection conn=new SqlConnection(connstr);
SqlDataAdapter da=new SqlDataAdapter(sql,conn);
DataSet ds=new DataSet();
da.Fill(ds,"tblFile"); //建一个新行
DataRow row=ds.Tables["tblFile"].NewRow();
row["title"]="aaaaa"; //filMyFile为上传控件
if(filMyFile.PostedFile!=null){
HttpPostedFile myFile=filMyFile.PostedFile;
int nFileLen=myFile.ContentLength;
byte[] myData=new byte[nFileLen];
myFile.InputStream.Read(myData,0, nFileLen);
row["picsize"]=myData.Length; //将字节数组赋值image型字段.
row["pic"] =myData;
}
DateTime now=DateTime.Now;
row["addtime"]=now.ToShortDateString();
//将此行加入表中.
dt.Rows.Add(row); //更新数据源
SqlCommandBuilder cb=new SqlCommandBuilder(da);
da.Update(ds,"tblFile");
}
private void uploadimage(HtmlInputFile file){
SqlConnection conn=new SqlConnection (Helper.GetConnectionString ());
try
{
int pos =file.PostedFile .FileName .LastIndexOf ("\\");
string filename=file.PostedFile .FileName .Substring (++pos);
byte[] buffer=Helper.fileUpload (file,512000000,"image");
SqlCommand cmd =new SqlCommand("imageAdd",conn);
cmd.CommandType=CommandType.StoredProcedure ;
SqlParameter p0=new SqlParameter ("@filename",SqlDbType.VarChar,256);
p0.Value =filename;
SqlParameter p1=new SqlParameter ("@filecontent",SqlDbType.Image);
p1.Value =buffer;
SqlParameter p2=new SqlParameter ("RETURN_VALUE",SqlDbType.Int );
p2.Direction =ParameterDirection.ReturnValue ;
cmd.Parameters .Add (p0);
cmd.Parameters .Add (p1);
cmd.Parameters .Add (p2);
conn.Open ();
cmd.ExecuteNonQuery();
int id=(int)cmd.Parameters ["RETURN_VALUE"].Value ;
tb1.Text+="\n";
if(!tb1.Visible)tb1.Visible =true;
}====================================
取:if(Request.Params ["id"]!=null)
{
SqlConnection conn=new SqlConnection (Helper.GetConnectionString ());
try
{
SqlCommand cmd=new SqlCommand ("imageGet",conn);
cmd.CommandType =CommandType.StoredProcedure ;
cmd.Parameters .Add ("@id",SqlDbType.Int ).Value=Request.QueryString ["id"].Trim ();
conn.Open ();
SqlDataReader dr=cmd.ExecuteReader (CommandBehavior.CloseConnection);
dr.Read ();
byte[] buffer=(byte[])dr.GetSqlBinary (1);dr.Close ();
Response.Clear ();
Response.AddHeader ("content-length",buffer.Length .ToString ());
Response.BinaryWrite (buffer);
Response.End ();
}
catch(SqlException sqlex)
{
Response.Write ("Erorr:"+sqlex.Message +"\n");
}
catch(Exception ex)
{
Response.Write ("Erorr:"+ex.Message +"\n");
}
finally
{
if(conn.State !=ConnectionState.Closed )conn.Close ();
}
sql="insert into data1(data1,[name],[time]) values(@data1,'asdfasd','"+DateTime.Now+"')";
public bool file(string sql,string txt)
{
try
{
FileStream fs;
fs = new FileStream(txt,FileMode.OpenOrCreate,FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] blob = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close(); conn.Open();
OleDbCommand cmd=new OleDbCommand(sql,conn);
OleDbParameter param = new OleDbParameter("@data1",OleDbType.VarBinary,blob.Length,
ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, blob);
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
return true;
}
catch(Exception e)
{
return false;
}
finally
{
conn.Close();
}
}
conn.Open();
SqlCommand cmd=new SqlCommand("insert into fuser values ('1a','1b',@i)",conn);
byte[] ib=new Byte[60000];
FileStream fs=new FileStream(@"D:\windows temp\temp\1.jpg",FileMode.Open ,FileAccess.Read );
fs.Read(ib,0,60000);
cmd.Parameters.Add("@i",SqlDbType.Image,(int)fs.Length);
cmd.Parameters["@i"].Value=ib;
cmd.ExecuteNonQuery();
conn.Close();-------------------------------------------------------
//从数据库读图片到pictureboxSqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");
conn.Open();
SqlCommand cmd=new SqlCommand("select 照片 from fuser where password='1b'",conn);
SqlDataReader reader=cmd.ExecuteReader();
reader.Read();
MemoryStream buf=new MemoryStream((byte[])reader[0]);
Image image=Image.FromStream(buf,true);
pictureBox1.Image=image;
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158