首页 > 数据库技术 > 详细

保存图片到数据库 与 数据库获取图片,显示在PictureBox控件中。

时间:2014-01-14 21:28:17      阅读:564      评论:0      收藏:0      [点我收藏+]
 //保存图片到数据库。
        private void btnSetPhoto_Click(object sender, EventArgs e)
        {
            //声明存放图片的字节数组
            byte[] photo;
            //打开要保存图片的文件流
            FileStream fs = new FileStream("Scence.bmp", FileMode.Open, FileAccess.Read);
            //创建字节流,对文件流进行读取操作
            BinaryReader br = new BinaryReader(fs);
            //通过字节流读取文件,并返回给字节数组
            photo = br.ReadBytes((int)fs.Length);
 
            //关闭字节流
            br.Close();
            //关闭文件流
            fs.Close();
            //创建数据库连接对象
            SqlConnection conn = new SqlConnection(ConnectionConfig.getConnectionString2());
            //组织SQL语句,将图片信息的存储以参数的方式设置
            string strSql = "Update stuInfo Set stuPhoto = @stuPhoto Where stuNo =‘QST001‘";
            //创建Command命令对象
            SqlCommand comm = new SqlCommand();
            //设置Command的连接对象
            comm.Connection = conn;
            //设置Command要执行的SQL语句
            comm.CommandText = strSql;
            //添加创建图片参数信息
            SqlParameter para = comm.Parameters.Add("@stuPhoto", SqlDbType.Image);
            //设置图片的字节数组值给参数
            para.Value = photo;
            //打开连接
            conn.Open();
            //执行SQL语句,返回影响数
            int numUpdate = comm.ExecuteNonQuery();
            //关闭连接
            conn.Close();
 
            richTextBox1.Text = string.Format("SQL语句“{0}”被执行!显示结果如下: \r", strSql);
            richTextBox1.Text = String.Format("更新了{0}条记录。", numUpdate.ToString());
 
        }

 

        //数据库获取图片,显示在PictureBox控件中。
        private void btnReadPhoto_Click(object sender, EventArgs e)
        {
            //创建数据库连接对象
            SqlConnection conn = new SqlConnection(ConnectionConfig.getConnectionString2());
            //组织SQL语句
            string strSql = "Select stuPhoto  from stuInfo Where stuNo =‘QST001‘";
            //创建Command命令对象
            SqlCommand comm = new SqlCommand();
            //设置Command的连接对象
            comm.Connection = conn;
            //设置Command要执行的SQL语句
            comm.CommandText = strSql;
            //打开连接
            conn.Open();
            //执行SQL语句,并返回SqlDataReader对象获取查询信息,参数表示:提供一种方法,以便 DataReader 处理包含带有大二进制值的列的行。
            SqlDataReader reader = comm.ExecuteReader(CommandBehavior.SequentialAccess);
 
            StringBuilder strResult = new StringBuilder();
            //读取数据流
            while (reader.Read())
            {
                //设置字节缓存大小
                int buffersize = 100;
                //设置读取二进制的字节索引位置
                int startindexer = 0;
                //设置读取字节数
                long retval;
                //创建缓冲字节
                Byte[] buffer = new Byte[buffersize];
                //创建内存流,将图片信息读取到内存中保存
                MemoryStream ms=new MemoryStream();
                //调用GetBytes()方法读取图片的信息,参数分别表示:
                                                          //列序号;
                                                          //字段中的索引,从其开始读取操作;
                                                          //要将字节流读入的缓冲区;
                                                          //buffer 中写入操作开始位置的索引;
                                                          //要复制到缓冲区中的最大长度。
                //返回值表示:读取的实际字节数
                retval = reader.GetBytes(0, startindexer, buffer, 0, buffersize);
                //继续读取信息,每次读取100字节,指导实际读取字节不是100字节为止
                while (retval == buffersize)
                {
                    //将字节信息写于内存流中,在内存中存放图片的二进制信息
                    ms.Write(buffer, 0, buffersize);
                    
                    ms.Flush();
 
                    startindexer += buffersize;
                    //读取数据库中的二进制图片信息,每次读取100字节
                    retval = reader.GetBytes(0, startindexer, buffer, 0, buffersize);
                }
 
                ms.Write(buffer, 0, (int)retval );
                ms.Flush();
 
               
                //将内存流中的图片二进制信息,生成Bitmap图片对象
                Bitmap image = new Bitmap(ms);
                //在图片框控件中,显示内存中的图片信息
                this.picPhoto.Image = image;
 
                //关闭内存流
                ms.Close();
 
            }
 
            //关闭SqlDataReader数据流
            reader.Close();
            //关闭连接
            conn.Close();
        }

保存图片到数据库 与 数据库获取图片,显示在PictureBox控件中。

原文:http://www.cnblogs.com/haipy/p/3513270.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!