Foxtable(狐表)用户栏目专家坐堂 → SqlBulkCopy 添加字段变量


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

主题:SqlBulkCopy 添加字段变量

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
SqlBulkCopy 添加字段变量  发帖心情 Post By:2019/9/23 11:23:00 [只看该作者]

老师,从客户的本地数据库同步数据到服务器数据库,由于本地数据库就只有这个客户的数据,所以没有 客户名称 这一列。
而服务器则是汇集各个客户,其他字段和客户的一模一样,就是加了个 客户名称 这一列

我是希望客户在同步数据的时候,可以把他的用户名传递到 客户名称 这一列,
但是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

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


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/23 11:52:00 [只看该作者]

蓝老师,就是源表 没有 姓名 这一列才不好办。

因为 源表,也就是客户那边,就只有这个客户,没有 姓名 这一列 。




[此贴子已经被作者于2019/9/23 11:52:21编辑过]

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


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

有什么列名就使用什么列名

Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("客户", "客户名称")

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/23 13:52:00 [只看该作者]

蓝老师:是如下意思:

源表:   A  B  C   D   (没有列名了)
目标表:A  B  C   D    客户名称

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/23 14:05:00 [只看该作者]

那客户名称的数据从哪来啊

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/23 14:20:00 [只看该作者]

蓝老师,就是用户名,指定的一个字符串。
源表本身是没有这一列

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/23 14:43:00 [只看该作者]

方法1、table添加一个临时列,把用户名先更新进去
2、先更新数据库,再统一更新客户名称:http://www.foxtable.com/webhelp/topics/2898.htm

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By: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编辑过]

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


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


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