.Net在SqlServer中的图片存取技术

原创 2004年06月22日 20:05:00

本文总结如何在.Net Winform和.Net webform(asp.net)中将图片存入sqlserver中并读取显示的方法
1,使用asp.net将图片上传并存入SqlServer中,然后从SqlServer中读取并显示出来
一,上传并存入SqlServer
 数据库结构
  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();
}

二,从SqlServer中读取并显示出来
在需要显示图片的地方添加如下代码:
<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()
                reader.Read();
                Response.ContentType="application/octet-stream";
                Response.BinaryWrite((Byte[])reader["FImage"]);
                Response.End();
                reader.Close();
     }
}


3,在winform中将图片存入sqlserver,并从sqlserver中读取并显示在picturebox中

1,存入sqlserver
数据库结构和使用的存储过过程,同上面的一样
 1.1,在窗体中加一个OpenFileDialog控件,命名为ofdSelectPic
 1.2,在窗体上添加一个打开文件按钮,添加如下单击事件代码:
    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中
 2.1 添加一个picturebox,名为ptbShow
 2.2 添加一个按钮,添加如下响应事件:
      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++使用ADO存取图片

 在项目中,我们需要把事故简图上传到总服务器,以便每个客户端都能下载或者查看。在网上找了找,向Server2000存储图片代码比较多,从数据库中读取图片并显示也不少,但是把图片从数据库中二进制数...
  • eit520
  • eit520
  • 2014年06月10日 16:01
  • 3095

VC在Sql Server数据库中如何存取二进制图片信息

转载地址:VC在Sql Server数据库中如何存取二进制图片信息  http://blog.hehehehehe.cn/a/1396.htm 在VC6.0中我们通常用Ado的Field 对象的Ge...
  • lijun5635
  • lijun5635
  • 2016年06月23日 09:13
  • 1091

C# SQLserver数据库图片存取

#region 数据库图片存取 /// /// 导入图片到数据库 /// /// public void Impo...
  • ilipan
  • ilipan
  • 2015年08月25日 21:50
  • 738

NET二进制图片存储与读取的常见方法

.NET二进制图片存储:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].   1.参数是图片路径:返回Byte[]类型:  ...
  • chengs_
  • chengs_
  • 2015年07月07日 09:13
  • 2285

GIS+=地理信息+容器技术(5)——Docker的网络设置和存储挂载

Docker的网络一般是由在Host主机上的一个veth{id}的虚拟网卡和一个container里面的eth0一一映射 ,我们可以看到,在宿主机创建了一个默认Docker0的网桥,该网桥负责把数据流...
  • chinagissoft
  • chinagissoft
  • 2016年03月14日 08:42
  • 1778

ASP.Net数据库如何存取图片

当我们有大量的图片或者图片比较大时,我们常规的做法可能是保存图片路径,但是也不排除需要将图片直接存放到数据库的情况,此时就需要保存图片到数据库了。这篇文章我会向大家介绍: 如何通过FileUpL...
  • dapangzi88
  • dapangzi88
  • 2017年01月29日 17:08
  • 1872

关于.NET技术前途问题的讨论

我去年曾经在论坛发起过关于.NET技术前途问题这个话题的讨论,也引起了很多同行和朋友的回复,时间过去大半年,自己也有了一些新的理解。本文的目的就是将其中一些精彩的观点整理出来并谈谈自己的观点。引子 ...
  • guwei4037
  • guwei4037
  • 2016年03月23日 13:42
  • 9455

mysql存取图片

package com.mycompany.mysql.image; import java.io.*; import java.sql.*; public class Main { ...
  • king_sky_wjb
  • king_sky_wjb
  • 2014年06月12日 14:20
  • 475

2017年,你需要GET的9大技术领域

2016年过去了,然而我一点也不怀念它,因为2017年的技术趋势更加吸引人。回顾一年里业界的发展,2017年的技术趋势初现端倪。根据CSDN知识库这一年来大家关注的热门知识图谱,我们来给大家梳理一下2...
  • u012662731
  • u012662731
  • 2017年01月12日 20:36
  • 869

使用Log4Net - 文件日志 和 SqlServer日志

Log4Net.config 配置文件: ...
  • CsethCRM
  • CsethCRM
  • 2016年10月19日 13:44
  • 456
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.Net在SqlServer中的图片存取技术
举报原因:
原因补充:

(最多只允许输入30个字)