当前位置:
首页 > Python基础教程 >
-
C#教程之【转载】C#将图片以二进制流的方式存入
在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技术小趣屋。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式