以文本方式查看主题

-  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=150138)

--  作者:天一生水
--  发布时间:2020/5/21 20:24:00
--  [求助]SqlBulkCopy插入数据时加个条件

老师,在利用SqlBulkCopy将 本地表"导入数据"   插入到 sql外部数据表"股票日线"   时,希望如果“代码”和“日期”都相同的行就不插入。请老师看一下第二段代码对不对?

谢谢!

 

’1、SqlBulkCopy代码

Dim tran As System.Data.SqlClient.SqlTransaction
try
    Dim conn As new System.Data.SqlClient.SqlConnection("server=voyo;uid=sa;pwd=hailun.;database=Test")
    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 DataTables("导入数据").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("导入数据").basetable)   \'你的datatable名字,执行把DataTable中的数据写入DB
    tran.Commit()                                  \'提交事务
   
catch ex As exception
    msgbox(ex.message)
    tran.Rollback()    \'返回False 执行失败!
End try

 

2、添加条件代码

For Each dr As DataRow In DataTables("导入数据").DataRows
    Dim pr As DataRow
    With DataTables("股票日线")
        pr = .SQLFind("代码 = \'" & dr("代码") & "\'and 日期 = \'" & dr("日期") & "\'")
    End With
   
    If pr Is Nothing Then

 

         。。。。。。(加入上面的)SqlBulkCopy代码

 

    End If  
Next


--  作者:有点蓝
--  发布时间:2020/5/21 21:10:00
--  
SqlBulkCopy是整表处理的,只能用于导入新增数据。如果对已有的数据更改是无法使用的。如果要去重,先遍历表格,把相同的数据删除掉。

或者导入数据库后在使用sql去重,比如:delete from {股票信息明细表} where [_Identify] not In (Select min([_Identify]) As id from {股票信息明细表} group by 代码,时间)