Foxtable(狐表)用户栏目专家坐堂 → 保存效率问题


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

主题:保存效率问题

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
保存效率问题  发帖心情 Post By:2023/2/13 20:47:00 [只看该作者]

客户表是阿里云服务器上SQL server2022express版中的外部表
现在的问题是增加300条空白行后进行保存,保存时间居然用了28秒多,老师指导一下,大概是什么原因。有什么解决的方法

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/2/13 21:11:00 [只看该作者]

和云服带宽有关。如果不是特别需要建议新增一条就保存一条。

如果新增多行数据,可以考虑使用sqlBulkCopy:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=147288

这里也对sqlBulkCopy:http进行了封装,可以看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=159738&replyID=&skin=1

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
  发帖心情 Post By:2023/2/14 11:00:00 [只看该作者]



copy.WriteToServer(dt.bas去掉中文etable)  '你的本地DataTable,要转成.net官方的基表类型 请教一下这句是什么意思,怎么改呢?

我是从EXCEL表导入狐表上的外部表,上面的代码只改了加粗部分,别的没动。也不知改的对不对

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
  发帖心情 Post By:2023/2/14 11:01:00 [只看该作者]

Dim dt As DataTable = DataTables("客户管理")

Dim conStr As String = "server=云服务器的ID,1433;uid=用户名;pwd=密码;database=客户管理" '

Dim tran As System.Data.SqlClient.SqlTransaction

Dim conn As new System.Data.SqlClient.SqlConnection(conStr)


Try

    Dim st As Date = Date.Now 

    conn.Open() 

    tran = conn.BeginTransaction()

    Dim mpList As new List(of System.Data.SqlClient.SqlBulkCopyColumnMapping)

 

    For Each dc As DataCol In dt.DataCols

        mpList.Add( new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.Name, dc.Name))

    Next

    Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran)

 

    For Each mp As System.Data.SqlClient.SqlBulkCopyColumnMapping In mpList

        Copy.ColumnMappings.Add(mp)

    Next

    copy.DestinationTableName = dt.Name 

    copy.BulkCopyTimeout=30

    copy.BatchSize = CInt(dt.DataRows.Count/10) 

    copy.WriteToServer(dt.bas去掉中文etable)  '你的本地DataTable,要转成.net官方的基表类型  这句不知道什么意思,不会改

    tran.Commit()

 

    Dim res As Double = Format(dt.DataRows.Count /10000,"0.00")

    MessageBox.Show("批量插入成功, " & res & "W行 耗时: " & (Date.Now - st).TotalSeconds & "秒")   

Catch ex As exception

    tran.Rollback()    '返回False 执行失败!

    MessageBox.Show("批量插入失败,原因:" & ex.message)

Finally

    conn.Close() '必须关闭,否则内存会一直泄露

End Try


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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/2/14 11:17:00 [只看该作者]

copy.WriteToServer(dt.bas去掉中文etable)
改为
copy.WriteToServer(dt.basetable)

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
  发帖心情 Post By:2023/2/21 15:50:00 [只看该作者]

改后,出现了提示

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
  发帖心情 Post By:2023/2/21 15:51:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
  发帖心情 Post By:2023/2/21 15:53:00 [只看该作者]

Dim conStr As String = "server=云服务器的ID,1433;uid=用户名;pwd=密码;database=客户管理
还有这句中database=,后面是数据库的名称,还是数据库中接收数据表的名称

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/2/21 16:03:00 [只看该作者]

回7楼:调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错

回8楼,是数据库名称

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


加好友 发短信
等级:一尾狐 帖子:410 积分:4455 威望:0 精华:0 注册:2015/3/21 14:25:00
  发帖心情 Post By:2023/2/22 15:36:00 [只看该作者]

再请教一下:sqlBulkCopy能从EXCEL表中直接合并到SQL表中吗?

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