Foxtable(狐表)用户栏目专家坐堂 → 狐表大量数据保存的问题


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

主题:狐表大量数据保存的问题

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


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
狐表大量数据保存的问题  发帖心情 Post By:2017/9/19 18:07:00 [只看该作者]

在狐表导入EXCEL文件,6000条数据,处理时间10秒

如果直接保存,大概要12分钟

试着用sql语句生成,因为数据每次都要更新,所以我是清空表然后新增行,所以都是Insert命令,还是要10分钟

求老师给个方法,6000条数据保存就要十分钟,有没有好的办法

 

自己瞎凑的代码如下

 

 

Dim p As WinForm.ProgressBar = e.Form.Controls("ProgressBar1")
p.Visible = True
Dim file As WinForm.TextBox = e.Form.Controls("file")
Dim filename As String = file.Value
If file.Value = "" Then
    MessageBox.show("文件不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else Dim test As String = filename.SubString(filename.Length - 3)
    If test <> "csv" And test <> "xls" And test <> "lsx"Then
        MessageBox.show("文件不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Else
        Dim Book As New XLS.Book(filename)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("储蓄台账").StopRedraw()
        DataTables("储蓄台账").DeleteFor("")
        Dim cmd1 As new SQLCommand
        Dim cc As String
        cmd1.C
        cc = "truncate Table 储蓄台账"
        cmd1.CommandText = cc
        cmd1.ExecuteNonQuery
        Dim nms() As String = {"客户号","客户姓名","上月储蓄日均","本月储蓄日均","上月储蓄余额","本月储蓄余额","活期存款余额","活期存款月日均"}
        Dim cn As Integer = Sheet.Rows.Count
        p.Maximum = cn - 1 '设置最大值
        p.Minimum = 0 '设置最小值
        p.Value = 0 '设置当前值
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim bh As String = sheet(n,0).Text
            Dim bha As String = bh.SubString(bh.Length - 8)
            Dim fdr As DataRow = DataTables("商户台账").Find("客户号 = '" & bha & "'")
            If  fdr IsNot Nothing Then
                Dim dr As DataRow =  DataTables("储蓄台账").AddNew()
                dr(nms(0)) = bha
                For m As Integer = 1 To nms.Length - 1
                    dr(nms(m)) = Sheet(n,m).Value
                Next
                dr("工号") = fdr("工号")
                Dim cd As String = "('" & dr("客户号") & "','" & dr("客户姓名") & "'," & dr("上月储蓄日均") & "," & dr("本月储蓄日均") & "," & dr("上月储蓄余额") & "," & dr("本月储蓄余额") & "," & dr("活期存款余额") & "," & dr("活期存款月日均") & "," & dr("工号") & ")"
                Dim cmd As new SQLCommand
                cmd.C
                Dim c As String = "INSERT INTO [sq_opldg52004].[储蓄台账] (客户号,客户姓名,上月储蓄日均,本月储蓄日均,上月储蓄余额,本月储蓄余额,活期存款余额,活期存款月日均,工号) VALUES " & cd
                cmd.CommandText = c
                cmd.ExecuteNonQuery
            End If
            If n Mod 100 = 0 Then
                p.Value = n
            End If
        Next
        Tables("储蓄台账").ResumeRedraw()
        msgbox("共导入: " &  cn & " 条数据!")
        Forms("导入存款").Close
    End If
End If


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/19 18:39:00 [只看该作者]

不要在导入的时候执行 cmd.ExecuteNonQuery

 

你可以先导入,然后再保存,参考 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=98689&skin=0

 


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


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/9/19 19:29:00 [只看该作者]

我一开始就是单独做保存,试了也需要那么久额

后来放到里面,速度没什么变化,我明天再试试看


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105486 积分:536421 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/19 20:15:00 [只看该作者]

Sqlserver如果全部插入可以试试SqlBulkCopy

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=84350

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


加好友 发短信
等级:二尾狐 帖子:562 积分:4159 威望:0 精华:0 注册:2015/5/13 8:32:00
  发帖心情 Post By:2017/9/19 20:25:00 [只看该作者]

 把  VALUES 批量 拼接,一次插入!
参考:

INSERT INTO MyTable(ID,NAME) VALUES(7,'003'),(8,'004'),(9,'005');

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


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/9/20 10:41:00 [只看该作者]

以下是引用cbt在2017/9/19 20:25:00的发言:
 把  VALUES 批量 拼接,一次插入!
参考:

INSERT INTO MyTable(ID,NAME) VALUES(7,'003'),(8,'004'),(9,'005');

测试了,少量数据还行,5000条数据狐表假死了,不知道是不是超出了sql语句长度还是其他的,没显示未响应,但是也没做任何数据处理


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


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/9/20 11:37:00 [只看该作者]

以下是引用有点蓝在2017/9/19 20:15:00的发言:
Sqlserver如果全部插入可以试试SqlBulkCopy

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=84350

牛逼,不到5秒完成,原来要十分钟


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/20 11:54:00 [只看该作者]

以下是引用qqibai在2017/9/19 19:29:00的发言:

我一开始就是单独做保存,试了也需要那么久额

后来放到里面,速度没什么变化,我明天再试试看

 

不可能需要这么久的,你不能sql语句一句一句执行,你要把所有sql语句一次性提交。

 

有问题的例子发上来看看。


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


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/9/20 13:37:00 [只看该作者]

以下是引用有点甜在2017/9/20 11:54:00的发言:

 

不可能需要这么久的,你不能sql语句一句一句执行,你要把所有sql语句一次性提交。

 

有问题的例子发上来看看。

对,原来按照论坛帖子做的sql函数提取,他是一条一条生成,一条一条保存的,很慢

昨晚看到说可以直接生成一条来保存,试了一下,一次性5000条狐表卡死,数据库未更新,没有再去测试1000条、500条的数据

直接用SqlBulkCopy,5秒搞定了


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/20 14:38:00 [只看该作者]

以下是引用qqibai在2017/9/20 13:37:00的发言:

对,原来按照论坛帖子做的sql函数提取,他是一条一条生成,一条一条保存的,很慢

昨晚看到说可以直接生成一条来保存

 

不,可,能。你加上事务

 

http://www.foxtable.com/webhelp/scr/2933.htm

 

或者直接测试2楼的例子 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=98689&skin=0

 


 回到顶部
总数 11 1 2 下一页