文档章节

【转载】C#将图片以二进制流的方式存入数据库

o
 osc_y8yehimr
发布于 2019/03/20 13:19
字数 683
阅读 3
收藏 0

精选30+云产品,助力企业轻松上云!>>>

在C#开发应用程序的过程中,图片一般会存放在文件系统中,当然图片也可以二进制的方式存放到数据库中,不过一般不建议存放在数据库中,因为图片占用的空间还是挺大的,特殊情况下可以考虑将图片存在数据。此文将介绍如何将图片存放在Sqlserver数据库中,并从数据库中读取出图片信息。

在将图片存储到数据库之前,需要先设计数据库表,建议使用sqlserver的数据类型Image类型存储数据,当然也有人使用二进制binary类型存储。

一、将图片写入数据库中的方法

在此方法中使用到FileStream类,该类在此的作用是将图片读取到文件流中。具体实现方法如下:

public void WriteImgToDb()
{
  SqlConnection conn=new SqlConnection("server=.;database=pubs;trusted_connection=Yes"); 
  conn.Open(); 
  SqlCommand scmd = null; 
  string Path = Application.StartupPath + "//Imgren"; //为获取文件的根目录 
  int j = 0; 
  FileStream fs=null; 
  for (int i = 1; i  <= 13; i++)  //利用循环添加一次添加图片 
  { 
      string sql = "insert into tb_Image values(@a,@b)"; //利用参数实现图片添加 
      scmd = new SqlCommand(sql, scon); 
  
      scmd.Parameters.Add("@a", SqlDbType.Int); 
      scmd.Parameters["@a"].Value = i;   //记住该方法,将值存入参数内 
  
      byte[] bt = new byte[10240];       //初始化图片大小 
      //创建图片写入流 
      fs = new FileStream(Path + "//" + i + ".bmp", FileMode.OpenOrCreate, FileAccess.Read); 
      fs.Read(bt, 0, bt.Length);  //读取图片的字节数 
      scmd.Parameters.Add("@b", SqlDbType.Image, (int)fs.Length); 
      scmd.Parameters["@b"].Value = bt; //将图片的字节数存入参数内 
      j = scmd.ExecuteNonQuery(); 
   } 
  if (j > 0) 
      MessageBox.Show("将图片写入数据库成功!!!", "友好提示"); 
  else 
      MessageBox.Show("将图片写入数据库失败!!!", "友好提示"); 
  fs.Close(); //关闭释放流资源 
}

二、将从数据库中读取图片到picturebox控件中(WinForm窗体控件)。

此方法使用了MemoryStream类即内存流对象,同时使用了Image类,Image类是.NET Framework内部提供的图片相关类。从Sqlserver数据库中读取图片数据具体实现方法如下:

public void ReadDbImage()
{
  SqlConnection conn=new SqlConnection("server=.;database=pubs;trusted_connection=Yes"); 
     conn.Open(); 
     SqlCommand scmd = null; 
     string sql = "select I_image from tb_image where I_id=" +int.Parse(textBox1.Text.Trim()) + ""; 
     scmd = new SqlCommand(sql, scon); 
     SqlDataReader red = scmd.ExecuteReader(); 
     if (red.Read()) 
     { 
       //创建支持存储区的内存流 
        MemoryStream ms = new MemoryStream((byte[])red[0]); 
        Image img = Image.FromStream(ms, true); //该方法: FromStream()为验证图像的流 
        this.pictureBox1.Image = img; 
     } 
     red.Close(); //关闭资源 
}

 

扩展阅读:C#工具类:使用SharpZipLib进行压缩、解压文件微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

备注:原文转载自C#将图片以二进制流的方式存入数据库_IT技术小趣屋

博主个人技术交流群:960640092,博主微信公众号如下:

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
C#导出EXCEL方法总结

下面介绍下我根据网上学习C#中导出EXCEL的几种方法: 一、asp.net导出Excel 1.将整个html全部输出到Excel 此方法会将html中所有的内容,如按钮、表格、图片等全部输出 View Code 2.将DataGri...

osc_8ik0jlpr
2018/02/27
1
0
review what i studied `date` - 2017-4-17

老男孩day1作业:login [root@xuhui-1 day1]# cat day1homework.py !/bin/env python import sys 加载sys模块 使用退出命令 file = 'user.lock' 黑名单文件 f = open(file,'a') 以附加模式打......

1498472791
2017/04/18
0
0
review what i studied `date` - 2017-4-17

老男孩day1作业:login [root@xuhui-1 day1]# cat day1homework.py !/bin/env python import sys 加载sys模块 使用退出命令 file = 'user.lock' 黑名单文件 f = open(file,'a') 以附加模式打......

1498472791
2017/04/18
0
0
通过java向mysql数据库中存取图片

学mysql的时候都是做个表格,放的也都是文字内容,虽然我知道长篇的文章和图片或者视频的都是用过文件夹的方式存储的,再讲文件路径存进数据库中。但还是想试试直接往mysql数据库中存取图片。...

osc_lfnnqo7g
2019/11/07
14
0
【转载】C#将图片转换为二进制流调用

在C#中可以使用MemoryStream类、BinaryFormatter类等来操作图片,将图片读取到二进制数据流中,最终转成二进制数据流进行调用,详细的实现如下方法所示。 private byte[] GetImageBytes(Ima...

osc_8mj3ztvg
2019/03/30
2
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式(4) 建造者模式

什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了...

zhixin9001
33分钟前
14
0
ArrayList源码分析 —— JDK8

ArrayList的特性 ArrayList内部使用数据作为存储结构,ArrayList可以理解为数组的扩展对象,封装了常用的和非常用的操作数组的方法。以及当数组长度不足以保存数组时,自动扩容数组,通常Arr...

XuePeng77
40分钟前
40
0
__slots__的用法? - Usage of __slots__?

问题: Python中__slots__的目的是什么-尤其是关于何时以及何时不使用它的目的? 解决方案: 参考一: https://stackoom.com/question/1ymu/slots-的用法 参考二: https://oldbug.net/q/1ym...

富含淀粉
51分钟前
17
0
Python分析42年高考数据,告诉你高考为什么这么难?

作者:徐麟 历年录取率 可能很多经历过高考的人都不知道高考的全称,高考实际上是普通高等学校招生全国统一考试的简称。从1977年国家恢复高考制度至今,高考经历了许多的改革,其中最为显著的...

爱码小哥
52分钟前
27
0
CKEditor 5 + SpringBoot实战(四):SpringBoot 实现文件上传

在本系列的文章中,我将介绍如何在Spring Boot Application中使用CKEditor编辑器。介绍的内容包括基本环境的搭建,文件上传,SpringData JPA数据持久化,CKEditor5的安装,CKEditor图片上传,...

树下魅狐
54分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部