今天学习了把图片文件读写到数据库中,我是用的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. 推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!

    大家好,我是狂师. 今天给大家介绍一款行为驱动开发测试框架:Cucumber. 1.介绍 Cucumber是一个行为驱动开发(BDD)工具,它结合了文本描述和自动化测试脚本.它使用一种名为Gherki ...

  2. UEFI与inf文件

    UEFI与inf文件 背景 学习高通UEFI中的LCD显示框架,看到有些博客对inf文件进行了介绍,因此整理了这方面的一些入门知识. 参考: https://blog.csdn.net/yunfeng ...

  3. .NET CORE 部署提示 An error occurred while starting the application.

    错误提示: 解决方法 检查一下nuget引用包 是否更新了版本,如果升级或者降级了版本,需要将新的dll文件更新一下

  4. python3 webssh

    简介 webssh 是 一个简单的 Web 应用程序,用作 ssh 客户端来连接到 ssh 服务器.它是用Python编写的,基于tornado.paramiko和xterm.js.下面简单搭建一个网 ...

  5. Java反射机制原理详解

    什么是反射? Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息 ...

  6. Linux Shell 常用命令 - 01篇

    系列文章: Linux Shell 常用命令 - 02篇 0. 在线使用 Linux Shell 参考 https://www.sohu.com/a/343421845_298038 JS/UIX - ...

  7. 机器学习策略篇:详解如何使用来自不同分布的数据,进行训练和测试(Training and testing on different distributions)

    如何使用来自不同分布的数据,进行训练和测试 深度学习算法对训练数据的胃口很大,当收集到足够多带标签的数据构成训练集时,算法效果最好,这导致很多团队用尽一切办法收集数据,然后把它们堆到训练集里,让训练的 ...

  8. 解决方案 | pywintypes.com_error: (-2147418111, '被呼叫方拒绝接收呼叫。', None, None)

    解决方案:加一个time.sleep(1)即可

  9. 解决方案 | 将时间转换为毫秒bat

    @echo off setlocal enabledelayedexpansion rem 输入的时间 set "time_input=00:07:07.1" rem 解析时间 f ...

  10. 写了一个json小工具,希望大家体验(Mac平台)

    用rust写了一个json小工具"JSON PICKER",欢迎大家试用: https://github.com/davelet/json-picker/releases/tag/ ...