以文本方式查看主题 - 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=141166) |
-- 作者:fubblyc -- 发布时间:2019/9/23 11:23:00 -- SqlBulkCopy 添加字段变量 老师,从客户的本地数据库同步数据到服务器数据库,由于本地数据库就只有这个客户的数据,所以没有 客户名称 这一列。 而服务器则是汇集各个客户,其他字段和客户的一模一样,就是加了个 客户名称 这一列 我是希望客户在同步数据的时候,可以把他的用户名传递到 客户名称 这一列, 但是SqlBulkCopy 好像只能是列名,不能用变量。 能有什么办法吗? Dim tran As System.Data.SqlClient.SqlTransaction try Dim conn As new System.Data.SqlClient.SqlConnection("server=10.12.25.30;uid=aa3;pwd=z91;database=a") conn.Open() \'打开链接 tran = conn.BeginTransaction() Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran) For Each dc As DataCol In tb1.datacols If dc.name = "姓名" Or dc.name = "手机号码" Or dc.name = "提交编号" Or dc.name = "短信字数" Or dc.name = "计费条数" Then Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name) Copy.ColumnMappings.Add(mapping1) End If Next copy.DestinationTableName = tb2 \'指定服务器上目标表的名称 copy.BatchSize = 1000 copy.WriteToServer(tb1.basetable) \'你的datatable名字,执行把DataTable中的数据写入DB tran.Commit() \'提交事务 catch ex As exception tran.Rollback() \'返回False 执行失败! End try
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 11:42:00 -- …… For Each dc As DataCol In tb1.datacols If dc.name = "姓名" Or dc.name = "手机号码" Or dc.name = "提交编号" Or dc.name = "短信字数" Or dc.name = "计费条数" Then Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name) Copy.ColumnMappings.Add(mapping1) End If Next Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("姓名", "客户名称") Copy.ColumnMappings.Add(mapping1) copy.DestinationTableName = tb2 \'指定服务器上目标表的名称 …… |
-- 作者:fubblyc -- 发布时间:2019/9/23 11:52:00 -- 蓝老师,就是源表 没有 姓名 这一列才不好办。 因为 源表,也就是客户那边,就只有这个客户,没有 姓名 这一列 。 [此贴子已经被作者于2019/9/23 11:52:21编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 12:11:00 -- 有什么列名就使用什么列名 Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("客户", "客户名称")
|
-- 作者:fubblyc -- 发布时间:2019/9/23 13:52:00 -- 蓝老师:是如下意思: 源表: A B C D (没有列名了) 目标表:A B C D 客户名称
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 14:05:00 -- 那客户名称的数据从哪来啊 |
-- 作者:fubblyc -- 发布时间:2019/9/23 14:20:00 -- 蓝老师,就是用户名,指定的一个字符串。 源表本身是没有这一列
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 14:43:00 -- 方法1、table添加一个临时列,把用户名先更新进去 2、先更新数据库,再统一更新客户名称:http://www.foxtable.com/webhelp/topics/2898.htm
|
-- 作者:fubblyc -- 发布时间:2019/9/23 14:48:00 -- 哦哦,蓝老师,我这样处理,有优化的空间吗? 加了临时列
Dim cmd As new SQLCommand cmd.C cmd.CommandText = "selec t * from CashKm " Dim dt As DataTable = cmd.ExecuteReader() dt.DataCols.Add("分销商",Gettype(String)) For Each dr As DataRow In dt.DataRows dr("分销商") = _gongsi Next [此贴子已经被作者于2019/9/23 14:48:48编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/23 15:08:00 -- http://www.foxtable.com/webhelp/topics/1532.htm |