Dim sbc As New SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.Default) 'conn是一个sqlconnection
sbc.BulkCopyTimeout = 900
sbc.DestinationTableName = tableName'tableName是目标数据表名称
Try
sbc.WriteToServer(dt)'dt是包含待插入数据库的源数据的datatable
Catch ex As Exception
MsgBox(ex.ToString)
End Try
用以上代码可以将表 dt 的所有记录批量插入 tableName 表
但是现在碰到个非常棘手的问题:目标表里是有数据的,当dt中某条(某些)记录与tableName表中的记录重复时,会取消插入,有没有办法忽略这些约束冲突并且继续插入所有不重复的内容?
当然如果只追求结果的话,倒是可以将datatable里的内容逐条插入,捕获到异常后直接略过处理并继续处理下一条。但是这样做的话,运行效率会被上述方案甩出65535条长安街,尤其是大数据量的情况下。
也看过另外一种解决方案,取消原表的约束,全部插入数据,删除数据表中的重复记录,但如果原始表数据很大的话,仍然会比较慢,而且这种办法本身也挺危险的。
或者各位有什么更给力一点的办法可以实现需求呢?先谢谢各位
------解决思路----------------------
写个存储过程,让它到数据库里去判断
循环写入慢,主要是因为需要反复通信,在数据库里的效率其实差不多的
------解决思路----------------------
我感觉 还是 先把你的dt 中的数据过滤一遍 再copy。 至于查询是否有重复的,那就创建索引查询试试。
------解决思路----------------------
这种操作肯定不会频繁使用,所以随便找一种解决方案就行了!
------解决思路----------------------
先从数据库里取出主键来,然后用这个主键去被同步的数据库里查询,比它大的就是新的
当然这只能同步增加的部分,哪些改了是不知道的
而且按你之前的思路,改掉的,你也不让插入