![](https://webcf.waybackmachine.org/web/20210919232356im_/https://habrastorage.org/getpro/habr/upload_files/5f8/5d6/24f/5f85d624fc7486bc16d71534a1aa5556.png)
SqlBulkCopy
можно использовать в трех вариантах: вставка данных, представленных в виде DataTable
, массива DataRow
или IDataReader
экземпляра. В этой статье я продемонстрирую две реализации IDataReader
интерфейса, которые используются в сочетании с SqlBulkCopy
высокопроизводительной вставкой в базу данных. Два других варианта похожи друг на друга и могут использоваться для относительно небольших объемов данных, поскольку они требуют, чтобы все записи были предварительно загружены в память перед их передачей SqlBulkCopy
. Напротив, этот IDataReader
подход более гибкий и позволяет работать с неограниченным количеством записей в «ленивом» режиме, что означает, что данные могут передаваться SqlBulkCopy
на лету так быстро, как сервер может их использовать. Это аналогично подходу IList<T>
vs.IEnumerable<T>
.