Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共10 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:大数据文本读取操作

1楼
YDS 发表于:2024/9/13 18:23:00
Dim lj As String = Args(0)
Dim bh As String = Args(1)
Dim jc As String = Args(2)
Dim sl As Integer = Args(3)
Dim i As Long = 0
Dim line As String
If Forms("AC200").Opened Then
    Dim constring As String = "Server=192.168.1.254;Database=AC200;User Id=AC200;Password=r6XcbWt7NWn7;"
    Using conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(constring)
        conn.Open() '打开链接
        Using copy = New System.Data.SqlClient.SqlBulkCopy(conn)
            copy.Destinati '指定服务器上目标表的名称
            Dim cls() As String = {"编号", "架次", "时标", "目标转速", "实际转速", "控制器状态", "电压", "电流"}
            Dim clss() As String = {"时标", "目标转速", "实际转速", "控制器状态", "电压", "电流"}
            For Each cl As String In cls
                copy.ColumnMappings.Add(cl, cl)
            Next
            copy.BatchSize = 1000
            copy.BulkCopyTimeout = 3600
            Dim drs As New List(Of System.Data.DataRow)(sl)
            Using sr As IO.StreamReader = New IO.StreamReader(lj) '直接从文件路径生成'    
                line = sr.ReadLine() '读取一行    
                i = 1
                Forms("AC200").Controls("js").Text = i
                Dim idx As Integer = 1
                Dim dr As System.Data.DataRow
                Dim dt As System.Data.DataTable = DataTables("AC200").basetable.clone
                Do While line IsNot Nothing '如果不为空继续执行.为空说明读取完毕,结束循环              
                    '数据处理
                    dr = dt.NewRow()
                    dr("编号") = bh
                    dr("架次") = jc
                    Dim ls() As String = line.Split(",")
                    For ii As Integer = 0 To ls.Length - 1
                        dr(clss(ii)) = ls(ii)
                    Next
                    drs.Add(dr)
                    If idx = sl Then
                        copy.WriteToServer(drs.ToArray)
                        idx = 1
                        drs.Clear
                        dt.Clear
                    Else
                        idx += 1
                    End If 
                    i = i + 1
                    Forms("AC200").Controls("js").Text = i
                    line = sr.ReadLine() '读取下一行   
                Loop 
            End Using
            If drs.Count > 0 Then
                copy.WriteToServer(drs.ToArray)
                drs.Clear
            End If
            Forms("AC200").Controls("js").Text = "OK"
        End Using
    End Using
End If
GC.Collect()


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20240913182144.jpg
图片点击可在新窗口打开查看

使用以上代码导入大概200w行以后就会报错,有没有什么解决方法?
2楼
有点蓝 发表于:2024/9/13 20:02:00
报什么错?
3楼
YDS 发表于:2024/9/14 7:52:00
超出内存
4楼
有点蓝 发表于:2024/9/14 8:41:00
导入按钮的代码发一下。

方便把这个文本文件发上来测试一下
5楼
YDS 发表于:2024/9/14 8:48:00
导入按钮的代码
SystemReady = False
Functions.AsyncExecute("TXTR", e.Form.Controls("lj").Value, e.Form.Controls("bh").Value, e.Form.Controls("jc").Value)
SystemReady = True
6楼
有点蓝 发表于:2024/9/14 8:52:00
几个控件分别填写的是什么值?
7楼
YDS 发表于:2024/9/14 8:59:00
C:\Users\Administrator\Desktop\AMRunLog_2244-_1124.TXT
2244
1134
10000
8楼
有点蓝 发表于:2024/9/14 9:20:00
看不出什么问题,方便把文本文件发给客服测试一下
9楼
YDS 发表于:2024/9/14 16:58:00
文件太大,发不过来,是不是datatable也有行数限制?
10楼
有点蓝 发表于:2024/9/14 17:09:00
代码有每10000行就清空的代码,不是datatable的问题。

文件大发给QQ客服测试
共10 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02734 s, 2 queries.