Foxtable(狐表)用户栏目专家坐堂 → sqlbulkcopy的问题


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

主题:sqlbulkcopy的问题

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


加好友 发短信
等级:八尾狐 帖子:1905 积分:16921 威望:0 精华:0 注册:2014/7/29 19:09:00
sqlbulkcopy的问题  发帖心情 Post By:2021/3/9 16:36:00 [只看该作者]

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中(有五列),而具列名称还可能不一样,可以实现吗?此时上面的代码应该如何修改?
谢谢!

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


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


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


加好友 发短信
等级:八尾狐 帖子:1905 积分:16921 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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
上面这种写法是表加载到ft的前台,如果直接用sql数据库中的表A copy 到另一个表B,写法要如何改变?

谢谢!

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


加好友 发短信
等级:超级版主 帖子:105963 积分:538890 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1905 积分:16921 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2021/3/9 18:05:00 [只看该作者]

主要是用于新项目迁移数据用,数据量都是几十万以上的,用insert into效率比较低

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


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

认真看看4楼,insert+into+select的用法不可能比SqlBulkCopy效率低,当然这个要2个表都是同一个数据库

如果不同数据库,表A肯定要先加载出来才能使用SqlBulkCopy

 回到顶部