ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4009|回复: 25

[分享] ADO将百万行Excel数据快速上传到MSSQL或MySQL数据库中 仅需几十秒

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-3 12:58 | 显示全部楼层 |阅读模式
本帖最后由 opiona 于 2023-7-8 13:24 编辑

DLL插件ExcelToSQL函数示例-20230703.rar (1.12 MB, 下载次数: 675)    试用期到: 2024-07-01


在ADO中可以使用SQL直接上传数据到SQL Serve   或者MySQL
但是数据多一点(几百上千行) 就会很慢,可能要几十秒

百万行上传慢的会让你怀疑人生

用VB.net写的DLL,实现VBA使用:SqlBulkCopy   和  MySqlBulkLoader功能  
5个字段 上传至腾讯云数据库  十万行 需要3秒, 百万行 需要28秒

其实这还包括从Excel内获取数据的耗时,动作本身更快

DLL内还有其他VBA不擅长的功能: 二维码生成与识别, 发送邮件, FTP上传下载, 文本或文件加密解密
QQ截图20230703131956.jpg

使用须知:
请自行在首页设置数据库连接信息: IP,数据库名,用户名,密码登
注册DLL 运行此文件即可:  自动注册类库_32_64位_运行2次.bat
各个功能的示例代码见工作表各个按钮的指定宏

MySQL可以导入CSV 上传速度变的很快
但是需要权限  SET GLOBAL local_infile=1;//1表示开启,0表示关闭  

121007bielz8bklbekx0il.jpg
QQ截图20230703132922.jpg

代码示例:
QQ截图20230708132357.jpg
原始帖子此DLL 在400多楼,新开贴在第一楼 方便查找







补充内容 (2024-9-29 23:36):
26楼:  有效期到: 2025-07-31

评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-3 22:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师厉害,太牛了

TA的精华主题

TA的得分主题

发表于 2023-7-4 07:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-4 08:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-4 10:11 | 显示全部楼层
最近大佬很生猛啊,不停的搬运好的库到vba这边来,辛苦了

TA的精华主题

TA的得分主题

发表于 2023-7-6 13:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我现在需要把一张表格上传到sql server数据库中,表格有2万行,100列,每次上传要60~70s。大师能帮忙看一下,我的这段代码还有没有提速的空间,我使用了批处理,比逐条处理要快一些,但是感觉还是有点久。
  1. Sub 不带表头测试ok()
  2.     t = Now
  3.     Const connString As String = "Provider=SQLOLEDB;Server=;user id=sa;password=123456;initial catalog=M_DATA;"
  4.     tableName = "E_date"

  5.     Set conn = CreateObject("ADODB.Connection")
  6.     conn.Open connString
  7.    
  8.     AR_ATE = ActiveSheet.UsedRange
  9.    
  10.     ATE_Date = Format(Now, "YYYY/MM/DD")
  11.     ATE_Prog = "234"
  12.    
  13.     strSQL = "INSERT INTO " & tableName & " VALUES ('" & ATE_Date & "','" & ATE_Prog & "',"

  14.     conn.BeginTrans
  15.    
  16.     ' 批量插入数据
  17.     batchSize = 1000 ' 每个批次的大小
  18.     For i = 2 To UBound(AR_ATE) Step batchSize
  19.         strSQL_batch = "" ' 用于存储当前批次的 SQL 语句
  20.         For j = i To i + batchSize - 1
  21.             If j > UBound(AR_ATE) Then Exit For ' 处理数据不足一个批次的情况
  22.             strSQL_row = strSQL
  23.             For k = 1 To UBound(AR_ATE, 2)
  24.                 If IsError(AR_ATE(j, k)) Then AR_ATE(j, k) = ""
  25.                 strSQL_row = strSQL_row & "'" & Replace(AR_ATE(j, k), "'", "''") & "', "
  26.             Next
  27.             strSQL_row = Left(strSQL_row, Len(strSQL_row) - 2) & ")"
  28.             strSQL_batch = strSQL_batch & strSQL_row & ";" ' 将每行 SQL 语句添加到批次中
  29.         Next
  30.         conn.Execute strSQL_batch ' 执行当前批次的 SQL 语句
  31.     Next
  32.     ' 提交事务
  33.     conn.CommitTrans
  34.    
  35.     conn.Close
  36.     Set conn = Nothing
  37.     MsgBox Format(Now - t, "hh:mm:ss")
  38. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-7 11:48 | 显示全部楼层
本帖最后由 opiona 于 2023-7-7 13:17 编辑
ww200611572 发表于 2023-7-6 13:29
我现在需要把一张表格上传到sql server数据库中,表格有2万行,100列,每次上传要60~70s。大师能帮忙看一下 ...

请下载 我的附件
根据示例 任选一个代码改一下
做一个数组保存到数据库的
QQ截图20230707114901.jpg

TA的精华主题

TA的得分主题

发表于 2023-8-27 19:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-8-27 20:01 | 显示全部楼层
jygzcj 发表于 2023-8-27 19:51
10万行excel快速输入到 acess 。

一般保存方式  没有SQL之外的快速方法
  1.     StrSQL = "INSERT INTO [测试表] "
  2.     StrSQL = StrSQL & " SELECT   [日期],[订单号],[数量]"
  3.     StrSQL = StrSQL & " FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & "].[数据表$]"
  4.     StrSQL = StrSQL & " WHERE NOT [订单号] IS NULL AND LEN([订单号])>0"
复制代码

TA的精华主题

TA的得分主题

发表于 2023-8-27 20:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opiona 发表于 2023-8-27 20:01
一般保存方式  没有SQL之外的快速方法

这个速度好快呀,网上有个select into 的方法不太会用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 01:44 , Processed in 0.050526 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表