以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- sqlbulkcopy的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=161198) |
-- 作者:happyft -- 发布时间:2021/3/9 16:36:00 -- sqlbulkcopy的问题 Dim conn As new System.Data.SqlClient.SqlConnection("server=" & db_IP & "," & sql_Port & ";uid=" & db_User & ";pwd=" & db_Pwd & ";database=" & db_Name) \'动态替换server=jhderp.gnway.cc,10433;uid=AAA;pwd=jhd-5688;database=DDD conn.Open() \'打开链接 tran = conn.BeginTransaction() Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran) \'-->SqlBulkCopy只能用于新增数据行到数据库中,不能用于修改 For Each dc As DataCol In DataTables(e.form.name & "_Table2").datacols Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name) Copy.ColumnMappings.Add(mapping1) Next copy.Destinati \'指定服务器上目标表的名称 copy.BatchSize = 1000 copy.WriteToServer(DataTables(e.form.name & "_Table2").basetable) \'你的datatable名字,执行把DataTable中的数据写入DB tran.Commit() \'提交事务 DataTables(e.form.name & "_Table2").AcceptChanges() 当要将订单表1(只有三列) 的数据复制到订单表2中(有五列),而具列名称还可能不一样,可以实现吗?此时上面的代码应该如何修改? 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2021/3/9 16:55:00 -- 只能一列对一列 Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(源表列名, 目的表列名) Copy.ColumnMappings.Add(mapping1)
|
-- 作者:HappyFt -- 发布时间:2021/3/9 17:35:00 -- For Each dc As DataCol In DataTables(e.form.name & "_Table2").datacols Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name) Copy.ColumnMappings.Add(mapping1) Next 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2021/3/9 17:53:00 -- 这种用法原表必须要先加载。如果没有加载直接使用sql不就行了,搞那么复杂干啥 https://www.baidu.com/baidu?word=insert+into+select INSERT INTO 表a (name, country) SELECT app_name, country FROM 表B;
|
-- 作者:HappyFt -- 发布时间:2021/3/9 18:05:00 -- 主要是用于新项目迁移数据用,数据量都是几十万以上的,用insert into效率比较低 |
-- 作者:有点蓝 -- 发布时间:2021/3/9 20:15:00 -- 认真看看4楼,insert+into+select的用法不可能比SqlBulkCopy效率低,当然这个要2个表都是同一个数据库 如果不同数据库,表A肯定要先加载出来才能使用SqlBulkCopy
|