ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量导入多个CSV文件到SQL数据库代码出错,求高手帮忙修改。

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-6 20:02 | 显示全部楼层
opiona 发表于 2023-1-5 23:06
只用一次  就不用这么麻烦了   
直接数据库管理软件 Navicat等: 导入CSV

能否帮我看一下,我的这个代码,相关文件都传到6楼了。这个代码实现xls/xlsx格式的没有问题,但不支持CSV。就改ADO文件语句即可。
  1. Const dizhi As String = "D:\test"    '这个路径名最后一定要有一个反斜杠 "\,如果文档目录有改变,这里需要改变"
  2. 'Const geshiC As String = ".xls"   '(如果是2007版,则后缀名改为 *.xlsx)

  3. Const geshiC As String = ".csv"

  4. '用的是本地的代码,操作的是本地的CSV文件,链接的是本地的数据库. 只是CSV数据太大,有的100万条一个文件,而且多个,CSV表格式都是一样的,想把数据都汇总到SQL一个表里。感觉用数组会很慢,想直接用数据库方式插入速度会好一些
  5. Sub 批量导入文件到sql()
  6.     '这个写法如果是xls/xlsx格式的没有问题,两个xls表可以导入,但是改成csv格式文件的,则提示:Error -2147467259(外部表不是预期的格式。),我其实要批量导入的是csv格式的文件。
  7.    
  8. #If ProjectStatus = "DEV" Then
  9.     Dim cn As ADODB.Connection

  10. #Else ' assume PROD
  11.     Dim cn As Object
  12.     Set cn = CreateObject("ADODB.Connection")
  13. #End If
  14.     Dim strSQL As String
  15.     Dim strConn As String
  16.     Dim path As String, fnTemp As String
  17.     Dim FileCount As Integer
  18.     Dim start As Double
  19.     start = Timer()   '计算这个程序运行时间。
  20.    
  21.     On Error GoTo test_Error
  22.    
  23.    
  24.     Dim fn, fp
  25.     '关闭屏幕刷新
  26.     Application.ScreenUpdating = False
  27.       
  28.    
  29.     fp = dizhi
  30.     'fp = ThisWorkbook.path
  31.    
  32.     fn = Dir(fp & "*" & geshiC) '取得第一个工作簿的文件名


  33.     FileCount = 0
  34.     Do While fn <> ""
  35.         Headers = True

  36.    
  37.         path = fp & fn
  38.         fnTemp = Replace(fn, geshiC, "")
  39.         strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";" & "Extended Properties=""Excel 12.0; IMEX=1;HDR=YES"""    '这条语句支持xls/xlsx格式文件,不支持CSV格式
  40.         Debug.Print strConn
  41.       
  42.         cn.Open strConn
  43.          
  44.         
  45.         strSQL = "Insert INTO [odbc;Driver={SQL Server};" & _
  46.                  "Server=.;Database=test;" & _
  47.                  "UID=sa;PWD=sa].test Select 字段一,字段二,字段三,字段四,字段五,字段六 FROM [" & fnTemp & "$] "
  48.         
  49.         'Debug.Print strSQL
  50.         cn.Execute strSQL

  51.         FileCount = FileCount + 1
  52.         fn = Dir() '取得下一个工作簿的文件名
  53.         cn.Close
  54.    
  55.     Loop '循环
  56.     Set cn = Nothing

  57.    '打开屏幕刷新
  58.     Application.ScreenUpdating = True
  59.     fenzhong = Int(Format(Timer - start, "0.00") / 60)
  60.     MsgBox "程序运行时间约是 " & fenzhong & " 分钟.导入" & FileCount & "CSV文件"
  61.     On Error GoTo 0
  62.     Exit Sub
  63.      
  64. test_Error:
  65.      
  66.     MsgBox "strSQL=" & strSQL & Chr(10) & " Error " & Err.Number & " (" & Err.Description & ")  " & Chr(13) & " fnTemp=" & fnTemp & Chr(13) & "path=" & path & Chr(13) & "strConn=" & strConn
  67.      
  68. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-1-7 05:19 | 显示全部楼层
用 bulk insert

bulk insert YYY --数据库表
from  N'd:/c1.csv'  -- txt文本
WITH(
FIELDTERMINATOR = ',', --字段分割符
ROWTERMINATOR = '\n',  --数据行分割符
DATAFILETYPE ='char',  --数据宽度
KEEPNULLS
)


https://www.cnblogs.com/yclizq/p/12154609.html
https://blog.csdn.net/catchme_439/article/details/78538910

在 CODEPAGE参数 代码页
这个有点坑,sql有些版本 不支持 ut8导入,看sql服务器有没有sql的补丁,得自己查

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-11 01:24 | 显示全部楼层
ddmc 发表于 2023-1-7 05:19
用 bulk insert

bulk insert YYY --数据库表

十分感谢,我试试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 20:29 , Processed in 0.029170 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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