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

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;

C# 图片保存到数据库和从数据库读取图片并显示的更多相关文章

  1. 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)

    (应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...

  2. VS.C#如何向数据数据库中存入和读取图片的

    写入图片部分代码:假设图片为 test.gifbyte [] bytes = File.ReadAllBytes(@"c:\test.gif");SqlConnection con ...

  3. MATLAB实例:将批量的图片保存为.mat文件

    MATLAB实例:将批量的图片保存为.mat文件 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.彩色图片 图片数据:horse.rar 1. MA ...

  4. 图片和base64编码字符串 互相转换,图片和byte数组互相转换

    图片和base64编码字符串 互相转换 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; ...

  5. 图片的另一种展现—将后台图片编码直接展现为图片

    1.应用场景            开发过程中,遇到这样的需求:需要将服务器上的图片展现在页面上,但是图片所在服务器不是对外的,图片所在服务器与应用服务器也不在同一台机器上,这时候就需要在开发中先将图 ...

  6. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    //浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...

  7. 图片保存到数据库以及C#读取图片

    图片保存到数据库,如果是sqlserver就是Image类型,如果保存到Oracle就是blob类型,在c#中相对应的就是byte[]类型,同时只需要对读出的数据强制转换就行(byte[])objec ...

  8. Scrapy Item用法示例(保存item到MySQL数据库,MongoDB数据库,使用官方组件下载图片)

    需要学习的地方: 保存item到MySQL数据库,MongoDB数据库,下载图片 1.爬虫文件images.py # -*- coding: utf-8 -*- from scrapy import ...

  9. PHP把图片保存到数据库,将图片本身保存在数据库,而非保存路径

    备注 百度开发者的云代码空间为了保证高可用,不允许用户将图片保存到代码空间中,使用CDN或者对象存储不仅收费而且使用比较复杂,于是考虑能否将img存储在数据库中,虽然很多人说会造成性能问题,权当一试 ...

随机推荐

  1. Most Powerful(ZOJ 3471状压dp)

    题意:n个原子,两两相撞其中一个消失,产生能量,给出任意两原子相撞能产生的能量,求能产生的最大能量. 分析:dp[i]表示情况为i时产生的最大能量 /*#include <map> #in ...

  2. codeforces 700B Connecting Universities 贪心dfs

    分析:这个题一眼看上去很难,但是正着做不行,我们换个角度:考虑每条边的贡献 因为是一棵树,所以一条边把树分成两个集合,假如左边有x个学校,右边有y个学校 贪心地想,让每条边在学校的路径上最多,所以贡献 ...

  3. C++的笔记学习第一篇,认识C++

    在一个类中包含两种成员: 数据和函数,分别称为C++数据成员和成员函数. 关于类: 类是C++新增加的重要数据类型,有了类,就就可以实现面向对象程序设计方法中的封装.信息隐蔽.继承.派生.多态等功能. ...

  4. C#插入排序详解

    这几天一直在研究算法,也算有点心得,现在跟大家分享一下,我是用C#做的 排序算法是想要成为大虾程序员必须要掌握的技术,它其实也是一种思想,你对算法熟悉,对以后编程有很大帮助 算法思路 ⒈ 从第一个元素 ...

  5. bzoj 1025 [SCOI2009]游戏(置换群,DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1025 [题意] 给定n,问1..n在不同的置换下变回原序列需要的不同排数有多少种. [ ...

  6. HDU5778 abs

    http://acm.hdu.edu.cn/showproblem.php?pid=5778 思路:只有平方质因子的数,也就是这题所说的   y的质因数分解式中每个质因数均恰好出现2次  满足条件的数 ...

  7. Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)

    本来这个问题真的没必要写的,可是真的困扰我太久%>_<%,决定还是记录一下. 首先,最权威清晰的安装文档还是官方的: Building the NetCDF-4.2 and later F ...

  8. Merkle Tree算法详解

    转载自:http://blog.csdn.net/yuanrxdu/article/details/22474697Merkle Tree是Dynamo中用来同步数据一致性的算法,Merkle Tre ...

  9. Spark系列(八)Worker工作原理

    工作原理图   源代码分析 包名:org.apache.spark.deploy.worker 启动driver入口点:registerWithMaster方法中的case LaunchDriver ...

  10. 定位程序问题的方法 -- clwu

    原本的标题的<定位程序代码的方法>,但问题有时候超出了自己代码的范围,而是别人的程序,所以今天想分享的是一个通用的分析问题(程序)的思路. 先来说一下在使用别人的程序(Vim)过程中遇到问 ...