【已验证】SqlBulkCopy 执行批量插入的时候报超时问题-解决办法
把datatable里面的数据插入到数据库,但是数据量大的情况下批量插入会提示超时,所以把datatable的数据分批写入数据库的
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
connection.Open();
int pageSize = 100000;//SqlBulkCopy大数据量的时候会超时,所以这里10万一次
int count = dt.Rows.Count / pageSize;
for (int i = 0; i <= count; i++)
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
try
{
// Set the timeout.
bulkCopy.BulkCopyTimeout = 0;//默认为 30 秒。 值为 0 表示没有限制;大容量复制将无限期等待。
DataTable tmpDt = dt.AsEnumerable().Skip(i * pageSize).Take(pageSize).CopyToDataTable();
bulkCopy.DestinationTableName = "表名";
bulkCopy.BatchSize = tmpDt.Rows.Count;
bulkCopy.WriteToServer(tmpDt);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
超时之前操作完成所允许的秒数。
注解
如果操作超时,则不会提交事务,并且将从目标表中删除所有复制的行。