2

我在 DataTable 中有 12,000 行,它在尝试 WriteToServer 时超时。有没有一种方法可以一次将 DataTable 的一部分写入数据库,而不是一次全部写入?目前,我的数据库的 Internet 连接不佳。如果我一次只能写 500 行,我可以避免超时。有没有办法做到这一点?

4

2 回答 2

3

你应该看看SqlBulkCopy.BatchSize

当 BatchSize 行已处理或没有更多行要发送到目标数据源时,批处理完成。

零(默认值)表示每个 WriteToServer 操作都是一个批处理。

如果已声明 SqlBulkCopy 实例而没有有效的 UseInternalTransaction 选项,则一次将行发送到服务器 BatchSize 行,但不执行与事务相关的操作。如果 UseInternalTransaction 有效,则每批行都作为单独的事务插入。

BatchSize 属性可以随时设置。如果批量复制已在进行中,则当前批次的大小将根据之前的批次大小进行调整。后续批次使用新大小。如果 BatchSize 最初为零并在 WriteToServer 操作已在进行时发生更改,则该操作将数据作为单个批次加载。同一 SqlBulkCopy 实例上的任何后续 WriteToServer 操作都使用新的 BatchSize。

参考这里

于 2012-04-07T15:09:08.840 回答
0

我有同样的问题,我只是这样解决它:

Dim strConnection as string="myconnectionstring"
Dim sqlBulk As New SqlBulkCopy(strConnection)
sqlBulk.BulkCopyTimeout = 0
于 2016-09-23T20:02:53.060 回答