.NET : 如何将大文件写入到数据库中

最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上的很多文件很重要,例如很多PPT和讲义。所以需要经常备份,而且因为这些文件很多,所以需要增量备份。 我尝试用过windows自带的ntbackup工具,但感觉不是很爽。它不支持压缩备份,而且界面也有点复杂

最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上的很多文件很重要,例如很多ppt和讲义。所以需要经常备份,而且因为这些文件很多,美国空间,所以需要增量备份。

我尝试用过windows自带的ntbackup工具,但感觉不是很爽。它不支持压缩备份,而且界面也有点复杂。

为了响应伟大领袖的“自力更生,丰衣足食”的号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。

本文分享一下其中一些重点的技术细节

其中一个关键的技术就是将文件使用二进制的方式存放在数据库的varbinary(max)的字段中。该字段最大允许的长度为2GB。

对于一些小文件,我们可以一次性读取它的所有字节,香港虚拟主机,然后一次提交到数据库

///

/// 这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存
///

static void SubmitFileByOnce() {
    string file = @”F:功夫熊猫.rmvb”;//文件大小为519MB
    byte[] buffer = File.ReadAllBytes(file);
    using (SqlConnection conn = new SqlConnection(“server=(local);database=demo;integrated security=true”)) {
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = “INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)”;
            cmd.Parameters.AddRange(
                new[]
                {
                    new SqlParameter(“@fileName”,file),
                    new SqlParameter(“@fileContents”,buffer)
                });

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
}

但是,上面的方法有几个问题,主要体现在如果文件比较大的话

1. 它需要一次性很大的内存,具体数据等同于文件大小。因为File.ReadAllBytes方法是将所有字节全部读入到内存。

2. 它会导致提交失败,就是因为数据太大了。数据库也会拒绝。

知网AI智能写作 知网AI智能写作

知网AI智能写作,写文档、写报告如此简单

知网AI智能写作 38 查看详情 知网AI智能写作

那么,我就对这个方法做了一下改进,将文件拆分为5MB一段,也就是说,此时每次申请的内存只有5MB。这就大大地提高了可用性。

///

  /// 这个方法是将文件切分为5MB的块,每次只是提交5MB,所以可能多次提交,但内存占用就比较小
  ///

  static void SubmitFileStepByStep() {
      string file = @”F:功夫熊猫.rmvb”;//以这个文件为例,大小为519MB,香港服务器,一共需要的时间大约94秒。还是有点慢的,所以还可能需要进行压缩
      FileStream fs = new FileStream(file, FileMode.Open);

      byte[] buffer = new byte[5 * 1024 * 1024];
      int readCount;
      using (SqlConnection conn = new SqlConnection(“server=(local);database=demo;integrated security=true”))
      {
          conn.Open();

          while ((readCount = fs.Read(buffer, 0, buffer.Length)) > 0)
          {

              using (SqlCommand cmd = conn.CreateCommand())
              {
                  cmd.CommandText = “INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)”;
                  cmd.Parameters.AddRange(
                      new[]
                  {
                      new SqlParameter(“@fileName”,file),
                      new SqlParameter(“@fileContents”,buffer)
                  });

                  cmd.ExecuteNonQuery();
              }

          }

          conn.Close();

      }
  }

这样的话,有一个后果就是一个文件,可能在数据库中会有多条记录。所以在读取的时候,我们需要对其进行合并

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/530351.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
《江南百景图》中夏端午粽米香全新活动时间及奖励一览
上一篇 2025年11月9日 10:06:25
Debian下Golang如何进行并发编程
下一篇 2025年11月9日 10:06:29

相关推荐

  • Linux安装Redis数据库,无需公网IP实现远程连接

    Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接

    redis作为一种高效的key-value数据库,因其将数据存储在内存中而具备极高的读写速度,广泛应用于多种场景中。以下将详细介绍如何在centos 8的linux虚拟机上搭建redis数据库,并利用cpolar实现内网穿透以便通过公网访问。 在Linux(CentOS 8)上安装Redis数据库 …

    2026年9月23日 • 用户投稿
    100
  • mysql如何进入编辑模式 mysql输入sql语句创建数据库

    mysql如何进入编辑模式 mysql输入sql语句创建数据库mysql如何进入编辑模式 mysql输入sql语句创建数据库mysql如何进入编辑模式 mysql输入sql语句创建数据库mysql如何进入编辑模式 mysql输入sql语句创建数据库

    创建mysql数据库需登录后执行sql语句;避免sql注入用参数化查询、输入验证、最小权限原则、waf;解决乱码需统一客户端、数据库、表编码为utf8mb4;优化查询性能可通过索引、explain分析、避免select *、使用join、分页优化、定期维护、硬件升级、缓存。 想要用MySQL创建数据…

    2026年9月23日 • 用户投稿
    1600
  • 瑞达写作官方网站登录端 瑞达写作App官方使用入口

    瑞达写作官方登录入口为https://ipapers.net,该平台支持论文初稿快速生成、多学科适配、智能修改及问卷报告自动化,集成国标引文与权威数据源,提供图表、代码等多元内容生成服务。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 瑞达…

    2026年9月22日
    000
  • 百度搜索app如何启用搜索关键词过滤_百度搜索app关键词过滤的设置技巧

    可通过减号语法排除关键词,如“健身教程 -广告”;用双引号实现精确匹配,如”瑜伽初学者教程”;结合site:指令限定范围,如Python入门教程 site:zhihu.com,提升搜索精准度。 如果您在使用百度搜索App时,希望减少不相关或不想要的搜索结果,可以通过设置关键词…

    2026年9月21日
    900
  • mysql数据库和表的关系是怎样

    数据库是表的集合,一个MySQL数据库可包含多个表,表依赖数据库存在,需先创建数据库才能建表,如CREATE DATABASE school;USE school;CREATE TABLE students;数据库实现数据隔离与管理,不同项目使用不同数据库,便于组织与权限控制。 MySQL数据库和表…

    2026年9月21日
    000
  • 在Java中如何创建一个天气查询小应用

    注册OpenWeatherMap获取API密钥;2. 使用Java 11+的HttpClient发送HTTP请求;3. 构造带城市参数的URL并调用天气接口;4. 解析返回的JSON数据提取温度和天气描述;5. 在控制台输出结果,支持中文城市需URL编码。 在Java中创建一个天气查询小应用,核心是…

    2026年9月21日
    000
  • Android Ksoap2序列化嵌套整数数组到.NET Web服务的解决方案

    本教程旨在解决Android Ksoap2在向.NET Web服务发送包含嵌套整数数组(如`ArrayList`)的自定义对象时遇到的序列化错误。核心解决方案包括将`ArrayList`替换为`Vector`,并为`Vector.class`添加显式Ksoap2类型映射,确保数据正确传输。 在And…

    2026年9月21日
    100
  • JTextPane 中 HTML 图片无法加载的解决方案

    本文针对 `JTextPane` 中使用 HTML 显示图片时,图片无法加载的问题,深入剖析了相对 URL 的概念以及 `HTMLDocument` 的 `setBase` 方法的作用。同时,提供了使用 `JLabel` 和 `ImageIcon` 替代 HTML 的解决方案,帮助开发者更灵活地展示…

    2026年9月12日
    100
  • PHP 8.4.14 发布

    PHP 8.4.14 正式发布,本次为一次以修复问题为主的维护性更新。主要变更内容如下: Core: 修复 GH-19765:object_properties_load() 绕过只读属性校验的问题。修复在启用 –enable-zend-max-execution-timers 时 hard_ti…

    2026年9月11日
    100
  • 如何在Linux中配置Java的用户权限

    通过修改Java安装目录权限并创建java用户组,仅允许root和该组成员访问JDK;2. 使用sudo配置特定用户无需密码执行java命令;3. 利用Java安全策略文件限制程序运行时权限;4. 通过用户环境变量控制PATH,确保只有指定用户能调用java。结合系统与Java层控制,可有效管理用户…

    2026年9月10日
    200
  • AIGC查重官网入口 知网免费检测链接

    知网官方不提供免费AIGC查重服务,个人用户需通过https://cx.cnki.net官网付费检测,或经由学校等机构系统获取免费权限,谨防非官方“免费入口”风险。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 目前知网官方不提供免费的AI…

    2026年9月10日
    100
  • 知网检测AIGC官网 免费入口链接直达

    知网AIGC检测需付费且无免费官方入口,官网为https://cx.cnki.net,个人用户可注册登录后上传文档选择检测服务,系统基于大模型算法分析并生成带AI特征标注的报告,用于论文自查。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ …

    2026年9月10日
    000
  • AIGC检测官网链接 知网免费入口直达

    知网AIGC检测无免费入口,个人需付费使用官方“知网个人查重服务系统”(https://cx.cnki.net),该系统由CNKI科研诚信管理系统研究中心推出,基于学术大数据与大语言模型分析文本语言模式与语义逻辑,识别AI生成内容并生成带防伪验证的可视化报告;登录后选择“AIGC检测”功能上传文档,…

    2026年9月10日
    200
  • 知网AIGC官网入口 免费检测查重链接

    知网AIGC检测官方入口为https://cx.cnki.net,提供基于语义逻辑与语言模式的AI生成内容分析服务,用户需登录后上传文档并付费检测,报告含疑似段落及特征值;目前无免费检测,个人使用需自费,部分机构或有采购名额;建议通过官网或学校获取可靠服务,避免非官方渠道风险。 ☞☞☞AI 智能聊天…

    2026年9月9日
    000
  • 免费AIGC官网检测 知网查重入口链接直达

    知网未推出独立AIGC检测服务,建议通过学校或单位使用集成AIGC功能的官方系统;可选维普、万方等正规平台进行检测,警惕非官方免费查重陷阱,个人预检可用PaperFree、早降重等提供免费额度的工具,最终应以院校或期刊认可的系统为准。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量…

    2026年9月9日
    100
  • 瑞达写作官网正版进入 瑞达写作App官方安装链接点

    瑞达写作官网正版入口为https://ipapers.net/,用户可在此访问网页版或获取App下载链接。该平台提供文献学习、智能大纲、长文记忆、问卷分析及一键生成图表等AI论文辅助功能,支持从开题到答辩的全流程写作,具备高效生成初稿与处理多学科内容的能力。 ☞☞☞AI 智能聊天, 问答助手, AI…

    2026年9月9日
    100
  • 瑞达写作官网通道进入 瑞达写作App官方正版移动入口

    瑞达写作官网为ipapers.net,用户可通过该网站快速生成论文初稿、智能改稿并获取数据支持,其功能覆盖多类型论文写作与问卷分析。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 瑞达写作官网通道进入 瑞达写作App官方正版移动入口在哪里?…

    2026年9月9日
    000
  • AIGC入口官网检测 知网免费查重链接

    知网AIGC查重需通过唯一官方入口https://cx.cnki.net,注册登录后上传Word或PDF文件(≤10万字),按2元/千字符计费,10分钟出报告,提供简洁版与全文版两种结果,总AIGC率为加权平均值,用于评估AI参与度,建议用户防范仿冒网站并结合人工判断结果。 ☞☞☞AI 智能聊天, …

    2026年9月9日
    000
  • 实战VSCode量子编程环境部署与量子算法调试全解析

    首先配置VSCode与QDK环境,再编写Q#量子程序,通过调试工具验证算法正确性,并结合Python实现混合编程,完成从开发到仿真的完整流程。 搭建一个高效的量子编程环境,是进入量子计算实战的第一步。Visual Studio Code(VSCode)凭借其轻量、插件丰富和调试能力强的特点,成为许多…

    2026年9月9日
    400
  • 瑞达写作官方网站登录点 瑞达写作App官方版本安装入口

    瑞达写作官方网站登录入口是https://ipapers.net,该平台支持输入论文题目半小时内生成五万字初稿,覆盖二十余种专业类别,具备智能修改、问卷设计、国标引文格式、数据图表生成等功能,提供开题报告、摘要、致谢词等模板,并支持移动端使用,操作便捷。 ☞☞☞AI 智能聊天, 问答助手, AI 智…

    2026年9月8日
    100

发表回复

登录后才能评论
关注微信