今天学习了把图片文件读写到数据库中,我是用的Access数据库,SQL还没去测试,不过都差不多

数据库表的样式

练习嘛就随便弄了下,说明下图片转成的字符串要用备注类型才可以哦

如果用的Sql数据库的话就用最大的字符类型吧

1。写入图片文件到数据库中

 //Access数据库连接字符串
const string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MyAccessFile\MyPicte.accdb;Persist Security Info=False"; string pic = string.Empty; //保存图片转化字符串 //选择图片并写入数据库中
private void button1_Click(object sender, EventArgs e)
{
//打开文件对话框选择图片文件
OpenFileDialog openfile = new OpenFileDialog();
openfile.Title = "请选择图片";
openfile.Filter="图片(*.jpg;*.bmp;*.png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.*";
if (DialogResult.OK != openfile.ShowDialog())
return; try
{
//显示图片到PictureBox控件中
Bitmap bmp = new Bitmap(openfile.FileName);
pictureBox1.Image = bmp;
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; //把图片转化成二进制,最后转成字符串
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
pic = Convert.ToBase64String(arr); //把Byte字节数组转成字符串 //pic = ImageToString(openfile.FileName);//自己写的图片转字符串的函数封装 //写入数据库中
OleDbConnection conn = new OleDbConnection(conStr);
string sql = $"insert into mTable (pictName,pictText) values ('{openfile.FileName}','{pic}')";
OleDbCommand cmd = new OleDbCommand(sql, conn);
conn.Open();
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
MessageBox.Show("图片保存成功!");
}
conn.Close();
conn.Dispose();
}
catch (Exception)
{ throw;
}
}

2。从数据库中读取图片文件

//从数据库中读取图片,并显示在PictureBoc控件中
private void button2_Click(object sender, EventArgs e)
{
int id = 6;//要读取的图片在数据库中的编号,因为是测试就手动修改要读取的编号
try
{
OleDbConnection conn = new OleDbConnection(conStr);
string sql = $"select pictText from mTable where ID={id}";
OleDbCommand cmd = new OleDbCommand(sql, conn);
conn.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
oda.Fill(dt);
conn.Close();
conn.Dispose(); if(dt.Rows.Count>0)
{
pic = dt.Rows[0][0].ToString();
if (!string.IsNullOrEmpty(pic))
{
//把string转成字节数组
byte[] imageBytes = Convert.FromBase64String(pic);
//把字节读取到内存
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length); //字节数组转成Image对象
Image image = Image.FromStream(memoryStream); //Image image = StringToImage(pic); //显示图片到控件中
this.pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
this.pictureBox2.Image = image;
}
}
}
catch (Exception)
{ throw;
}
}

学习成果展示:

好了今天就学到这了。

C#读写图片文件到Access数据库中的更多相关文章

  1. .net(C#)在Access数据库中执行sql脚本

    自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 /// <summary> /// 执行sql语句 /// ...

  2. Jena将owl文件持久化到数据库中

    package cn.edu.shu.db; import java.io.File; import java.io.FileInputStream; import java.io.IOExcepti ...

  3. C#操作Access数据库中遇到的问题(待续)

    (1)在向Access中插入数据时,显示语法错误,后来将生成的sql语句单独拿到Access数据库中运行,能正确插入数据,从网上寻找资料,有人的sql语句正常,但是该语句在Access中运行错误,错误 ...

  4. 用SQL语句创建和删除Access数据库中的表;添加列和删除列

    用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...

  5. 向ACCESS数据库中的表导入EXCEL表,在 System.Data.OleDb.OleDbException 中第一次偶然出现的“System.Data.dll”类型的异常

    向ACCESS数据库中的表导入EXCEL表,EXCEL表Sheet1中与ACCESS数据库表中的关键字对应的列的值,不能与数据库中表的主键项值重复,不然就会出现 在 System.Data.OleDb ...

  6. C#获取Access数据库中的所有表名和列名

    //C#获取Access数据库中的所有表名和列名    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" ...

  7. PHP ~ 通过程序删除图片,同时删除数据库中的图片数据 和 图片文件

    删除单张图片 <?php         require_once '../../conn.php';              //连接数据库         $ID = $_GET['ID' ...

  8. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  9. 记录python爬取猫眼票房排行榜(带stonefont字体网页),保存到text文件,csv文件和MongoDB数据库中

    猫眼票房排行榜页面显示如下: 注意右边的票房数据显示,爬下来的数据是这样显示的: 网页源代码中是这样显示的: 这是因为网页中使用了某种字体的缘故,分析源代码可知: 亲测可行: 代码中获取的是国内票房榜 ...

  10. 在SSM框架中如何将图片上传到数据库中

    今天我们来看看SSM中如何将图片转换成二进制,最后传入到自己的数据库中,好了,废话不多说,我们开始今天的学习,我这里用的编辑器是IDEA 1.导入图片上传需要的jar依赖包 1 <depende ...

随机推荐

  1. Python_10 debug、类和对象

    一.查缺补漏 APP测试流程梳理https://www.cnblogs.com/dengqing9393/p/6497068.html 有关类的知识点http://testingpai.com/art ...

  2. 【仿真】Carla之Docker 运行 及 渲染相关 [6]

    参考与前言 carla官方对于docker 运行的描述: CARLA in Docker Docker的使用:[暂时没贴] 相关已知issue,欢迎补充 https://github.com/carl ...

  3. SpringBoot的知识点总结和常用注解

    SpringBoot 知识点总结 基础入门 基本介绍.基本特性.核心模块.版本选择.环境要求.安装集成.技快速开发接口.Maven Wrapper.Spring Boot CLl 配置管理 配置类.配 ...

  4. Mybatis面试题及答案

    Ibatis和Mybatis? Ibatis:2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis.从2010年后Ibatis在没更新过,彻底变成了 ...

  5. oeasy教您玩转vim - 19 - 使用标记

    使用标记 回忆上节课内容 跳转到行号 200G 设置行号选项 显示行号 :se nu 显示相对行号 :se rnu 如何用命令行跳转 :100 但是我如何有的时候记不住到底跳到多少行 能否做个标记留个 ...

  6. 使用win server 2019服务器的iis服务发布静态网页

    1.首先远程连接到服务器 2.打开服务器管理器 3添加角色和功能 4.安装类型:选择基于角色或基于功能的安装  →服务器角色:从服务器池中选择服务器 5.服务器角色选择Web服务器(iis) 6.功能 ...

  7. 软件设计 软件设计模式之SOLID原则

    软件设计模式之SOLID原则 By:授客 QQ:1033553122 #单一职责原则(SRP) 定义:任何一个软件模块都只对某一类行为者负责 说明:这里"软件模块",在大部分情况下 ...

  8. html5 video标签 去掉边框黑线

    只需在样式中添加: mix-blend-mode: darken; 注意:IE和Edge浏览器不支持mix-blend-mode属性

  9. Linux 文本文件编辑相关命令简介【Linux 常用命令系列二】

    〇.前言 本文介绍了如何通过 vim 命令,对文本文件进行打开.编辑.保存等相关操作,并通过简单的示例演示了常用用法. 一.关于文本文件的操作 1.1 打开,查看(cat).编辑(vim) 打开文本文 ...

  10. 免费使用TasteWP一键搭建线上临时WordPress网站

    虽然用宝塔面板或者1Panel面板可以非常快速的搭建一个WordPress网站,但是有时候只想测试下我设计的页面或者开发的主题和插件,又得买服务器,绑定域名,安装程序,搭建起来也过于浪费时间了:再或者 ...