以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  保存效率问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=185272)

--  作者:HANZHIGANG
--  发布时间:2023/2/13 20:47:00
--  保存效率问题
客户表是阿里云服务器上SQL server2022express版中的外部表
现在的问题是增加300条空白行后进行保存,保存时间居然用了28秒多,老师指导一下,大概是什么原因。有什么解决的方法

--  作者:有点蓝
--  发布时间: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
--  发布时间:2023/2/14 11:00:00
--  


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

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

--  作者:HANZHIGANG
--  发布时间: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


--  作者:有点蓝
--  发布时间:2023/2/14 11:17:00
--  
copy.WriteToServer(dt.bas去掉中文etable)
改为
copy.WriteToServer(dt.basetable)

--  作者:HANZHIGANG
--  发布时间:2023/2/21 15:50:00
--  
改后,出现了提示
--  作者:HANZHIGANG
--  发布时间:2023/2/21 15:51:00
--  

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

--  作者:HANZHIGANG
--  发布时间:2023/2/21 15:53:00
--  
Dim conStr As String = "server=云服务器的ID,1433;uid=用户名;pwd=密码;database=客户管理
还有这句中database=,后面是数据库的名称,还是数据库中接收数据表的名称

--  作者:有点蓝
--  发布时间:2023/2/21 16:03:00
--  
回7楼:调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错

回8楼,是数据库名称

--  作者:HANZHIGANG
--  发布时间:2023/2/22 15:36:00
--  
再请教一下:sqlBulkCopy能从EXCEL表中直接合并到SQL表中吗?