Foxtable(狐表)用户栏目专家坐堂 → 大数据文本读取操作


  共有1851人关注过本帖树形打印复制链接

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

帅哥哟,离线,有人找我吗?
YDS
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:643 积分:3684 威望:0 精华:0 注册:2011/5/21 18:05:00
大数据文本读取操作  发帖心情 Post By: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行以后就会报错,有没有什么解决方法?

 回到顶部
帅哥哟,离线,有人找我吗?
YDS
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:643 积分:3684 威望:0 精华:0 注册:2011/5/21 18:05:00
  发帖心情 Post By:2024/9/14 7:52:00 [显示全部帖子]

超出内存

 回到顶部
帅哥哟,离线,有人找我吗?
YDS
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:643 积分:3684 威望:0 精华:0 注册:2011/5/21 18:05:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
YDS
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:643 积分:3684 威望:0 精华:0 注册:2011/5/21 18:05:00
  发帖心情 Post By:2024/9/14 8:59:00 [显示全部帖子]

C:\Users\Administrator\Desktop\AMRunLog_2244-_1124.TXT
2244
1134
10000

 回到顶部
帅哥哟,离线,有人找我吗?
YDS
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:643 积分:3684 威望:0 精华:0 注册:2011/5/21 18:05:00
  发帖心情 Post By:2024/9/14 16:58:00 [显示全部帖子]

文件太大,发不过来,是不是datatable也有行数限制?

 回到顶部