【已验证】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;
                        }
                    }
                }

            }

超时之前操作完成所允许的秒数。

注解

如果操作超时,则不会提交事务,并且将从目标表中删除所有复制的行。

猜你喜欢

转载自blog.csdn.net/zgscwxd/article/details/134775869