图片保存到数据库的方法:
public void imgToDB(string sql) { //参数sql中要求保存的imge变量名称为@images //调用方法如:imgToDB("update UserPhoto setPhoto=@imageswhere UserNo='" + temp + "'"); FileStream fs = File.OpenRead(t_photo.Text); byte[] imageb = new byte[fs.Length]; fs.Read(imageb, 0, imageb.Length); fs.Close(); SqlCommand com3 = new SqlCommand (sql,con); com3.Parameters.Add("@images", SqlDbType.Image).Value = imageb; if (com3.Connection.State == ConnectionState.Closed) com3.Connection.Open(); try { com3.ExecuteNonQuery(); } catch { } finally { com3.Connection.Close(); } }
数据库中读出图片并显示在picturebox中:
方法一:PRivate void ShowImage(string sql) { //调用方法如:ShowImage("select Photo from UserPhoto where UserNo='" + userno +"'"); SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); byte[] b= (byte[])cmd.ExecuteScalar(); if (b.Length 〉 0) { MemoryStream stream = new MemoryStream(b, true); stream.Write(b, 0, b.Length); pictureBox1.Image = new Bitmap(stream); stream.Close(); } conn.Close(); }
方法二:当在dg中选中某行时:private void dg_MouseUp(object sender, MouseEventArgs e) { //整行选择 if (e.Button == System.Windows.Forms.MouseButtons.Left) {//用户编号,姓名,性别,身份证号,籍贯,学院,系所,校区,部门,电话,照片 //显示相片 object imgobj=dg[10, dg.CurrentRow.Index].Value; if (imgobj != null && !Convert.IsDBNull(imgobj)) { byte[] imgb = (byte[])imgobj; MemoryStream memStream = new MemoryStream(imgb); try { Bitmap myimge = new Bitmap(memStream); this.pictureBox1.Image = myimge; } catch { DB.msgbox("从数据库读取相片失败!"); } } else pictureBox1.Image = null; }
使用C#进行图片的数据库存取
本文总结如何在.Net WinForm和.Net WebForm(asp.net)中将图片存入SQL Server中并读取显示的方法 。1.使用asp.net将图片上传并存入SQL Server中,然后从SQL Server中读取并显示出来:1)上传并存入SQL Server
数据库结构create table test{id identity(1,1),FImage image}相关的存储过程Create proc UpdateImage(@UpdateImage Image)AsInsert Into test(FImage) values(@UpdateImage)GO在UpPhoto.aspx文件中添加如下:<input id="UpPhoto" name="UpPhoto" runat="server" type="file"><asp:Button id="btnAdd" name="btnAdd" runat="server" Text="上传"></asp:Button>然后在后置代码文件UpPhoto.aspx.cs添加btnAdd按钮的单击事件处理代码:private void btnAdd_Click(object sender, System.EventArgs e){//获得图象并把图象转换为byte[]HttpPostedFile upPhoto=UpPhoto.PostedFile;int upPhotoLength=upPhoto.ContentLength;byte[] PhotoArray=new Byte[upPhotoLength];Stream PhotoStream=upPhoto.InputStream;PhotoStream.Read(PhotoArray,0,upPhotoLength);//连接数据库SqlConnection conn=new SqlConnection();conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";SqlCommand cmd=new SqlCommand("UpdateImage",conn);cmd.CommandType=CommandType.StoredProcedure;cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);cmd.Parameters["@UpdateImage"].Value=PhotoArray;//如果你希望不使用存储过程来添加图片把上面四句代码改为://string strSql="Insert into test(FImage) values(@FImage)";//SqlCommand cmd=new SqlCommand(strSql,conn);//cmd.Parameters.Add("@FImage",SqlDbType.Image);//cmd.Parameters["@FImage"].Value=PhotoArray;conn.Open();cmd.ExecuteNonQuery();conn.Close();}2)从SQL Server中读取并显示出来在需要显示图片的地方添加如下代码:<asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>ShowPhoto.aspx主体代码:private void Page_Load(object sender, System.EventArgs e){if(!Page.IsPostBack){SqlConnection conn=new SqlConnection()conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";string strSql="select * from test where id=2";//这里假设获取id为2的图片SqlCommand cmd=new SqlCommand(strSql,conn);conn.Open();SqlDataReader reader=cmd.ExecuteReader();reader.Read();Response.ContentType="application/octet-stream";Response.BinaryWrite((Byte[])reader["FImage"]);Response.End();reader.Close();}}
2.在WinForm中将图片存入SQL Server,并从SQL Server中读取并显示在picturebox中1),存入SQL Server数据库结构和使用的存储过过程,同上面的一样首先,在窗体中加一个OpenFileDialog控件,命名为ofdSelectPic ;然后,在窗体上添加一个打开文件按钮,添加如下单击事件代码:Stream ms;byte[] picbyte;//ofdSelectPic.ShowDialog();if (ofdSelectPic.ShowDialog()==DialogResult.OK){if ((ms=ofdSelectPic.OpenFile())!=null){//MessageBox.Show("ok");picbyte=new byte[ms.Length];ms.Position=0;ms.Read(picbyte,0,Convert.ToInt32(ms.Length));//MessageBox.Show("读取完毕!");//连接数据库SqlConnection conn=new SqlConnection();conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";SqlCommand cmd=new SqlCommand("UpdateImage",conn);cmd.CommandType=CommandType.StoredProcedure;cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);cmd.Parameters["@UpdateImage"].Value=picbyte;conn.Open();cmd.ExecuteNonQuery();conn.Close();ms.Close();}}2)读取并显示在picturebox中首先,添加一个picturebox,名为ptbShow然后,添加一个按钮,添加如下响应事件:SqlConnection conn=new SqlConnection();conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";string strSql="select FImage from test where id=1";SqlCommand cmd=new SqlCommand(strSql,conn);conn.Open();SqlDataReader reader=cmd.ExecuteReader();reader.Read();MemoryStream ms=new MemoryStream((byte[])reader["FImage"]);
Image image=Image.FromStream(ms,true);reader.Close();conn.Close();ptbShow.Image=image;
新闻热点
疑难解答