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

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. MySQL基础之第8章 视图

    8.1.视图简介 视图由数据库中的一个表,视图或多个表,视图导出的虚拟表.其作用是方便用户对数据的操作. 8.2.创建视图必须要有CREATE VIEW 和 SELECT 权限SELECT selec ...

  2. Log4NET简介

    log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 前提 最近做项目需要记录系统日志和用 ...

  3. ECshop 二次开发模板教程4

    今天我们学习一下如何在首页调取某个分类的商品:注意了,这里的修改有一些麻烦了哦:首先你需要下载一套新的模板,比如blueksy 上传到模板目录 /themes/ 也就是 /themes/bluesky ...

  4. java web 学习十四(JSP原理)

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  5. ylbtech-SubwayNav(地铁线路导航)-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-SubwayNav(地铁线路导航)-数据库设计 DatabaseName:SubwayNav(地铁线路导航) Type:线路导航 1.A, ...

  6. UVALive 5029

    用字典树来查询,关键是怎么处理输入的8个数字代表的字符,把每个数分别除以0.95和1.05得到8的区间,按左区间从小到大排序,那么和第一个区间有交集的必然代表二进制0,与它没交集的之后都是1,因为题目 ...

  7. 获取json中字段,判断是否有想要的key

    if(json.containsKey("key")){ String refundSid = json.getString("key"); } 如果也要判断v ...

  8. Gridview数据导出到ExcelWord 防止出现乱码

    1.页面中添加绿色字体代码<%@ Page Language="C#" CodeFile="111.aspx.cs" Inherits="111 ...

  9. C#快速排序详解

    使用快速排序法对一列数字进行排序的过程 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). 步骤为: 从数列中挑出一个元素,称 ...

  10. Python中的__init__,__call__

    __init__函数 当一个类实例被创建时, __init__() 方法会自动执行,在类实例创建完毕后执行,类似构建函数.__init__() 可以被当成构建函数,不过不象其它语言中的构建函数,它并不 ...