| //保存图片到数据库。 |
| 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