问题描述
stringfilename=null;filename=this.File1.PostedFile.FileName;filename=filename.Substring(filename.LastIndexOf("\")+1);Session["photo"]=filename=System.DateTime.Now.ToString("yyyyMMddhhmmss")+filename;this.File1.PostedFile.SaveAs(Server.MapPath("up")+@""+filename);Response.Write("<script>alert('上传成功!')</script>");SqlConnectioncon=newSqlConnection("server=.;database=Users;uid=sa;pwd=123");con.Open();SqlCommandcmd=newSqlCommand("insertintoshowvalues('"+this.TextBox1.Text+"','"+Session["photo"]+"')",con);cmd.ExecuteNonQuery();con.Close();我想把图片(名)上传到数据库,这样行吗?然后怎么到数据库中提取并显示呢????
解决方案
解决方案二:
你这种方法我可没试过,应该不可以ASP.NET如何存取SQLServer数据库图片 SQLServer提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQLServer中存储和读取图片。 1、建立一个表: 在SQLSERVER中建立这样结构的一个表:列名类型目的IDInteger主键IDIMGTITLEVarchar(50)图片的标题IMGTYPEVarchar(50)图片类型.ASP.NET要以辨认的类型IMGDATAImage用于存储二进制数据 2、存储图片到SQLSERVER数据库中 为了能存储到表中,你首先要上传它们到你的WEB服务器上,你可以开发一个webform,它用来将客户端中TextBoxwebcontrol中的图片入到你的WEB服务器上来。将你的encType属性设置为:myltipart/formdata.Streamimgdatastream=File1.PostedFile.InputStream;intimgdatalen=File1.PostedFile.ContentLength;stringimgtype=File1.PostedFile.ContentType;stringimgtitle=TextBox1.Text;byte[]imgdata=newbyte[imgdatalen];intn=imgdatastream.Read(imgdata,0,imgdatalen);stringconnstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"];SqlConnectionconnection=newSqlConnection(connstr);SqlCommandcommand=newSqlCommand ("INSERTINTOImageStore(imgtitle,imgtype,imgdata) VALUES(@imgtitle,@imgtype,@imgdata)",connection);SqlParameterparamTitle=newSqlParameter ("@imgtitle",SqlDbType.VarChar,50);paramTitle.Value=imgtitle;command.Parameters.Add(paramTitle);SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image);paramData.Value=imgdata;command.Parameters.Add(paramData);SqlParameterparamType=newSqlParameter("@imgtype",SqlDbType.VarChar,50);paramType.Value=imgtype;command.Parameters.Add(paramType);connection.Open();intnumRowsAffected=command.ExecuteNonQuery();connection.Close(); 3、从数据库中恢复读取 现在让我们来从SQLServer中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。privatevoidPage_Load(objectsender,System.EventArgse){ stringimgid=Request.QueryString["imgid"]; stringconnstr=((NameValueCollection) Context.GetConfig("appSettings"))["connstr"]; stringsql="SELECTimgdata,imgtypeFROMImageStoreWHEREid="+imgid; SqlConnectionconnection=newSqlConnection(connstr); SqlCommandcommand=newSqlCommand(sql,connection); connection.Open(); SqlDataReaderdr=command.ExecuteReader(); if(dr.Read()) { Response.ContentType=dr["imgtype"].ToString(); Response.BinaryWrite((byte[])dr["imgdata"]); } connection.Close();} 要注意的是Response.BinaryWrite而不是Response.Write.
解决方案三:
下面给大家一个用于C#Winform的存入、读取程序。其中不同请大家自己比较!(为了方便起见,我将数据库字段简化为二个:imgtitle和imgdata。usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.IO;usingSystem.Data.SqlClient;namespaceWindowsApplication21{ ///<summary> ///Form1的摘要说明。 ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.Buttonbutton1; ///<summary> ///必需的设计器变量。 ///</summary> privateSystem.ComponentModel.Containercomponents=null; privatestringConnectionString="IntegratedSecurity=SSPI;InitialCatalog=;Data Source=localhost;"; privateSqlConnectionconn=null; privateSqlCommandcmd=null; privateSystem.Windows.Forms.Buttonbutton2; privateSystem.Windows.Forms.PictureBoxpic1; privateSystem.Windows.Forms.OpenFileDialogopenFileDialog1; privatestringsql=null; privateSystem.Windows.Forms.Labellabel2; privatestringnowId=null; publicForm1() { // //Windows窗体设计器支持所必需的 // InitializeComponent(); conn=newSqlConnection(ConnectionString); // //TODO:在InitializeComponent调用后添加任何构造函数代码 // } ///<summary> ///清理所有正在使用的资源。 ///</summary> protectedoverridevoidDispose(booldisposing) { if(conn.State==ConnectionState.Open) conn.Close(); if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); } #regionWindowsFormDesignergeneratedcode ///<summary> ///设计器支持所需的方法-不要使用代码编辑器修改 ///此方法的内容。 ///</summary> privatevoidInitializeComponent() { this.button1=newSystem.Windows.Forms.Button(); this.pic1=newSystem.Windows.Forms.PictureBox(); this.button2=newSystem.Windows.Forms.Button(); this.openFileDialog1=newSystem.Windows.Forms.OpenFileDialog(); this.label2=newSystem.Windows.Forms.Label(); this.SuspendLayout(); // //button1 // this.button1.Location=newSystem.Drawing.Point(0,40); this.button1.Name="button1"; this.button1.Size=newSystem.Drawing.Size(264,48); this.button1.TabIndex=0; this.button1.Text="加入新的图片"; this.button1.Click+=newSystem.EventHandler(this.button1_Click); // //pic1 // this.pic1.Location=newSystem.Drawing.Point(280,8); this.pic1.Name="pic1"; this.pic1.Size=newSystem.Drawing.Size(344,264); this.pic1.TabIndex=3; this.pic1.TabStop=false; // //button2 // this.button2.Location=newSystem.Drawing.Point(0,104); this.button2.Name="button2"; this.button2.Size=newSystem.Drawing.Size(264,40); this.button2.TabIndex=4; this.button2.Text="从数据库中恢复图像"; this.button2.Click+=newSystem.EventHandler(this.button2_Click); // //openFileDialog1 // this.openFileDialog1.Filter=""图像文件(*.jpg,*.bmp,*.gif)|*.jpg|*.bmp|*.gif""; // //label2 // this.label2.Location=newSystem.Drawing.Point(0,152); this.label2.Name="label2"; this.label2.Size=newSystem.Drawing.Size(264,48); this.label2.TabIndex=5; // //Form1 // this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14); this.ClientSize=newSystem.Drawing.Size(632,273); this.Controls.AddRange(newSystem.Windows.Forms.Control[]{ this.label2, this.button2, this.pic1, this.button1}); this.Name="Form1"; this.Text="Form1"; this.Load+=newSystem.EventHandler(this.Form1_Load); this.ResumeLayout(false); } #endregion ///<summary> ///应用程序的主入口点。 ///</summary> [STAThread] staticvoidMain() { Application.Run(newForm1()); } privatevoidbutton1_Click(objectsender,System.EventArgse) { openFileDialog1.ShowDialog(); if(openFileDialog1.FileName.Trim()!="") { FileInfofi=newFileInfo(openFileDialog1.FileName); stringimgtitle=openFileDialog1.FileName; intimgdatalen=(int)fi.Length; byte[]imgdata=newbyte[imgdatalen]; Streamimgdatastream=fi.OpenRead(); intn=imgdatastream.Read(imgdata,0,imgdatalen); if(conn.State==ConnectionState.Open) conn.Close(); ConnectionString="IntegratedSecurity=SSPI;"+"InitialCatalog=mydb;"+"Data Source=localhost;"; conn.ConnectionString=ConnectionString; try { stringmySelectQuery="INSERTINTOImageStore(imgtitle,imgdata)VALUES(@imgtitle,@imgdata)"; //stringmySelectQuery="UPDATEImageStoresetimgtitle=@imgtitle,imgdata=@imgdata"; SqlCommandmyCommand=newSqlCommand(mySelectQuery,conn); SqlParameterparamTitle=newSqlParameter("@imgtitle",SqlDbType.VarChar,50); paramTitle.Value=imgtitle; myCommand.Parameters.Add(paramTitle); SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image); paramData.Value=imgdata; myCommand.Parameters.Add(paramData); conn.Open(); intnumRowsAffected=myCommand.ExecuteNonQuery(); conn.Close(); } catch(Exceptionerr) { MessageBox.Show("您输入名称可能在数据库中已存在或输入为空,请检查!"+err.ToString()); } finally {}}} privatevoidForm1_Load(objectsender,System.EventArgse) { } privatevoidbutton2_Click(objectsender,System.EventArgse) { //打开数据库连接 if(conn.State==ConnectionState.Open) conn.Close(); ConnectionString="IntegratedSecurity=SSPI;"+"InitialCatalog=mydb;"+"DataSource=localhost;"; conn.ConnectionString=ConnectionString; //创建数据适配器 stringsql="SELECT*FROMImageStore"; SqlCommandcommand=newSqlCommand(sql,conn); try {conn.Open();} catch(Exceptionnewerr) { MessageBox.Show("不能打开数据联接!"); } finally {} SqlDataReaderdr=command.ExecuteReader(); if(dr.Read()) { FileInfofi=newFileInfo("temp"); FileStreammyStream=fi.Open(FileMode.Create); byte[]mydata=((byte[])dr["imgdata"]); //label2.Text="您现在看到的是:"+dr["imgtitle"].ToString(); foreach(byteainmydata) { myStream.WriteByte(a); } myStream.Close(); ImagemyImage=Image.FromFile("temp"); pic1.Image=myImage; pic1.Refresh(); dr.Close(); } else { MessageBox.Show("没有成功读入数据!"); } conn.Close();}}}
解决方案四:
在网站上面新建立一个文件夹用于存放图片。数据库存放图片名称!读文件夹名+图片名称就可以了在上传的时候注意,注意压缩比例!
解决方案五:
楼上正解
解决方案六:
收藏