zoukankan      html  css  js  c++  java
  • C# 图片保存到数据库和从数据库读取图片并显示

    图片保存到数据库的方法:

            public void imgToDB(string sql)
            {   //参数sql中要求保存的imge变量名称为@images
                //调用方法如:imgToDB("update UserPhoto set Photo=@images where 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 

    As 
    Insert 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;

  • 相关阅读:
    074孤荷凌寒从零开始学区块链第74天DAPP029
    073孤荷凌寒从零开始学区块链第73天DAPP028
    iOS开发——UI进阶篇(十七)CALayer,核心动画基本使用
    iOS开发——UI进阶篇(十六)Quartz2D实战小例子
    iOS开发——UI进阶篇(十五)Quartz2D介绍
    iOS开发——UI进阶篇(十四)modal
    iOS开发——UI进阶篇(十三)UITabBarController简单使用,qq主流框架
    iOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
    iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
    iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期
  • 原文地址:https://www.cnblogs.com/gc2013/p/3848200.html
Copyright © 2011-2022 走看看