Dapper存取Blob类型数据

news2024/11/26 2:45:42

🌮 Dapper存取Blob类型数据

前言:

blob类型是数据库用于保存二进制文件的一种类型,可以将文件存储到数据库的表中。(使用到的情况比较少,毕竟文件可以直接在服务器上保存并且访问为什么要放到数据库里。但如果你服务器上空间紧张而数据库空间很宽裕的话也可以使用BLOB存储文件类型)

用例表

请添加图片描述

测试图片:

请添加图片描述

1.🚽 原生的Ado.Net 存取Blob

原生的Ado.Net存取Blob比较繁琐,

  • 存Blob类型
[Test]
public void TestOne()
{
    string row_id = "2023052615301302163504";
    using(var conn = new OracleConnection(Encrypter.DecryptAES("XXXXX",
        "XXXX", "XXXX")))
    {
        conn.Open();

        OracleCommand command = new OracleCommand($@" update TB_CM_COMPANY_COST SET PDF_UPLOAD = :bb where ROW_ID = '{row_id}' ", conn);
        command.CommandType = CommandType.Text;




        FileStream fs = new FileStream($@"E:\\TestOne\\Tpic.png", FileMode.OpenOrCreate, FileAccess.ReadWrite);

        byte[] buffer = new byte[fs.Length];

        fs.Read(buffer, 0, buffer.Length);

        OracleBlob blob = new OracleBlob(conn);
        blob.Write(buffer,0,buffer.Length);

        command.Parameters.Add(":bb", OracleDbType.Blob).Value = blob;

        command.ExecuteNonQuery();


    }
}

插入成功如图:

请添加图片描述

请添加图片描述

  • 取Blob类型
public void TestOne()
{
    string row_id = "2023052615301302163504";
    using(var conn = new OracleConnection(Encrypter.DecryptAES("XXXX",
        "XXXX", "XXXXX")))
    {
        conn.Open();

        #region 取Blob

        string SelectBlob = $@"select PDF_UPLOAD from TB_CM_COMPANY_COST where ROW_ID = '{row_id}'";

        OracleCommand command = new OracleCommand(SelectBlob, conn);
        command.CommandType = CommandType.Text;

        OracleDataReader dataReader = command.ExecuteReader();

        if (dataReader.Read())
        {
            OracleBlob oracleBlob = dataReader.GetOracleBlob(0);    //从dataReader中获取Blob类型
            byte[] buffer = new byte[oracleBlob.Length];            //先读取
            oracleBlob.Read(buffer, 0, (int)oracleBlob.Length);

            FileStream fs = new FileStream("Pic.png", FileMode.OpenOrCreate, FileAccess.ReadWrite);

            fs.Write(buffer, 0, buffer.Length);                    //再写入

            fs.Close();
        }

        #endregion
    }
  }
}

获取成功:

请添加图片描述

2.🚀 通过Dapper获取和保存Blob类型

通过上面的例子可以看出,ADO.NET原生的方法操作blob类型需要一个OracleBlob类作为中介,通过它来获取流或是字节。然后再进行下一步的操作,如果要获取的数据比较多,则比较繁琐。

而Dapper的方法更加简单,直接用byte[]来传递二进制文件,操作则更加简单。

  • Dapper保存Blob类型
string row_id = "2023052615190002159537";
using(var conn = new OracleConnection(Encrypter.DecryptAES("XXXXXXXX",
    "XXXXX", "XXXXX")))
{
    conn.Open();

    
    #endregion


    #region Dapper保存Blob

    FileStream fs = new FileStream($@"E:\\TestOne\\Tpic.png", FileMode.OpenOrCreate, FileAccess.ReadWrite);

    byte[] buffer = new byte[fs.Length];
	fs.Read(buffer, 0, buffer.Length);
    //直接传byte[]数组,10分甚至9分简单
    int res = conn.Execute($@" update TB_CM_COMPANY_COST SET PDF_UPLOAD = :bb where ROW_ID = '{row_id}' ", new { bb =  buffer});



    #endregion

}

请添加图片描述

  • Dapper取Blob类型
byte[] buffer = conn.QueryFirst<byte[]>($@"Select PDF_UPLOAD from TB_CM_COMPANY_COST where ROW_ID = '{row_id}'", null);

FileStream fs = new FileStream("XXZ.png", FileMode.OpenOrCreate, FileAccess.ReadWrite);

fs.Write(buffer, 0, buffer.Length);

请添加图片描述

🚩 Tip: 如需通过ORM对象来获取Blob列,只需要将Blob列的对应类型设置为和上例中的byte[]即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.MySQL安装与配置

1.MySQL安装与配置 &#x1f4e4;1 数据库介绍&#x1f4e4;&#x1f6aa;1.1关于MySQL主要要学啥&#x1f6aa; ✉️2 MySQL服务器安装✉️&#x1f4c4;2.1 Windows绿色安装&#x1f4c4;&#x1f4d1;2.2 Windows中重装MySQL&#x1f4d1; &#x1f4e8;3 Mac中常见的安装问…

多云环境中的微服务应用安全挑战

随着越来越多的组织将云策略扩展到私有云、公共云、本地数据中心和边缘站点&#xff0c;将多云作为数字转型倡议的一部分&#xff0c;新的安全挑战不断涌现&#xff0c;必须在安全倡议的每个阶段加以考虑。 在云中操作具有多个优势&#xff0c;任何组织&#xff0c;无论是公共…

在线答题小程序制作,这些坑你一定要避免

在线答题小程序制作&#xff0c;你需要知道以下几个关键点&#xff0c;才能避免一些常见的坑。这里&#xff0c;我会为你详细介绍如何制作一个高质量的在线答题小程序。 关键点一&#xff1a;确定目标用户群体 在制作在线答题小程序之前&#xff0c;你需要确定你的目标用户群…

行云创新受邀参加阿里云开发者技术沙龙,分享云原生技术实践案例

云原生IDE&#xff0c;定义开发新常态 2023年5月28日&#xff0c;由阿里举办的云原生技术实践营-阿里云开发者技术沙龙在深圳市南山区成功举办。本次沙龙活动主要围绕云原生话题开展实践案例经验分享&#xff0c;行云创新CEO马洪喜作为受邀嘉宾之一&#xff0c;参加了本次活动…

UITableView学习笔记

看TableView的资料其实已经蛮久了&#xff0c;一直想写点儿东西&#xff0c;却总是因为各种原因拖延&#xff0c;今天晚上有时间静下心来记录一些最近学习的TableView的知识。下面进入正题&#xff0c;UITableView堪称UIKit里面最复杂的一个控件了&#xff0c;使用起来不算难&a…

本地Linux搭建web服务并发布公网访问 - 无需公网IP

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章&#xff1a;在Ubunt…

代码随想录 栈与队列 Java

文章目录 &#xff08;简单&#xff09;232. 用栈实现队列&#xff08;简单&#xff09;225. 用队列实现栈&#xff08;简单&#xff09;20. 有效的括号&#xff08;简单&#xff09;1047. 删除字符串中的所有相邻重复项&#xff08;中等&#xff09;150. 逆波兰表达式求值&…

【红黑树 -- 理论与实现】

目录&#xff1a; 前言红黑树的概念红黑树的性质 插入过程遇到的情况情况1 -- 根节点情况2 -- parent为黑色情况3 -- parent为红色uncle为红色uncle为黑色uncle不存在 插入过程代码实现分析红黑树是否构建成功总结 前言 打怪升级&#xff1a;第88天 红黑树&#xff0c;可以说是…

Xubuntu16.04 系统偶发出现自动登出的问题

继上次发现的这个问题 xubuntu系统偶发自动登出&#xff0c;这次问题又浮现了&#xff0c;我第一时间拷贝了系统日志。 为了减少搜索量&#xff0c;可以先清除之前的系统日志&#xff0c;待问题出现 echo > /var/log/syslog echo > /var/log/kern.logMar 21 15:07:58 au…

面试:解决数字精度丢失

理论上用有限的空间来存储无限的小数是不可能保证精确的&#xff0c;但我们可以处理一下得到我们期望的结果 当你拿到 1.4000000000000001 这样的数据要展示时&#xff0c;建议使用 toPrecision 凑整并 parseFloat 转成数字后再显示&#xff0c;如下&#xff1a; parseFloat(…

为什么新产品没热度,流量分析

很多人反馈新产品上线之后却没有多少热度&#xff0c;这究竟是什么样原因呢?今天来为大家分享下为什么新产品没热度&#xff0c;流量分析。 新产品没有热度其实可以从两个主要方面进行探讨&#xff1a; 一、主观原因 1.缺乏吸引消费者的独特卖点 这个原因可能是新产品太过于普…

9个服务端提升debug效率的IDEA Debugger技巧

不可否认&#xff0c;未来的一到两年中&#xff0c;程序员的编码体验将会发生剧烈的变化。作为一名一线开发&#xff0c;要如何提前准备&#xff0c;来应对这种变化呢&#xff1f; 前言 在AIGC时代&#xff0c;虽然深度学习模型可以仅通过一段注释来生成我们想要的代码&#xf…

.net 混淆工具

obfuscation tools .net 社区有很多混淆工具, 比如这个清单: https://github.com/NotPrab/.NET-Obfuscator 比较有名的商业工具有 .NET REACTOR https://www.eziriz.com/, 开源软件中, 最受欢迎的有: obfuscar https://github.com/obfuscar/obfuscar老版 ConfuserEx https://gi…

代码危机!如何利用自定义异常应对复杂业务逻辑

大家好&#xff0c;我是小米&#xff0c;在这篇文章中&#xff0c;我将和大家分享关于自定义异常的使用场景以及一个实际的电商项目案例。自定义异常在软件开发中起到了重要的作用&#xff0c;能够帮助我们更好地管理和处理各种异常情况。让我们一起来看看各个场景下如何使用自…

85.建立主体页面-第一部分

记住我们之前画的草图&#xff0c;根据我们的草图来构建初始的页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta n…

202313读书笔记|《山居七年》——我只想在广袤璀璨的星河里享受生的鲜活,独自飞,游走

202313读书笔记|《山居七年》——我只想在广袤璀璨的星河里享受生的鲜活&#xff0c;独自飞&#xff0c;游走 《山居七年》 作者张二冬&#xff0c;选择隐士山居是一种很自由随性的生活态度&#xff0c;我觉得这不是普通人可以拥有的&#xff0c;比如我&#xff0c;并未入世也…

Nginx学习1--介绍和安装

文章目录 官方网站常用功能核心组成下载安装源码安装linux包安装ubuntu安装docker安装 官方网站 http://nginx.org/ 官方文档 常用功能 静态资源部署处理静态文件、处理索引文件以及支持自动索引&#xff1b; Rewrite地址重写正则表达式 反向代理提供反向代理服务器&#xf…

大数据:配置云服务器,主机名映射和SSH免密登录,创建Hadoop用户,复制免密登录

大数据&#xff1a;配置云服务器&#xff0c;主机名映射和SSH免密登录&#xff0c;创建Hadoop用户&#xff0c;复制免密登录 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 …

十、Camera 启动流程分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Camera 启动流程概览二、Launcher 跟Camera APP 交互三、Camera app 与FWK Camera Service 交互四、Camera FWK 与 Camera HAL 交互五、Camera FWK…

35岁,阿里6年,被打了低潜,已生无可恋,纠结该不该出去,40岁的人能不能给点建议?...

35岁是个转折点&#xff0c;许多人都在35岁时陷入迷茫&#xff0c;比如下面这位网友&#xff1a; 35岁&#xff0c;在阿里已经6年了&#xff0c;现在要混是可以混下去&#xff0c;但发展肯定是没有了&#xff0c;已经被老板打了低潜。目前被这个业务摩擦得已经生无可恋&#xf…