把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;}}}}
超时之前操作完成所允许的秒数。
注解
如果操作超时,则不会提交事务,并且将从目标表中删除所有复制的行。