Как копировать содержимое DataTable в таблицу SQL, пока я его заполняю
======================================================================

 Я определил DataTable, добавив типизированные столбцы. Я ожидаю, что DataTable будет находиться в диапазоне от 1 миллиона до 3 миллионов строк. 

 Я использую Microsoft TextFieldParser (потому что он поддерживает несколько форматов фиксированной ширины, а также способ Peek), чтобы заполнить строки DataTable. 

 Я хотел бы иметь некоторую операцию, которая либо копирует строки из DataTable в зеркальную таблицу SQL. 

 Если я заполню весь DataTable, а затем с помощью SqlAdapter и SqlCommandBuilder обновить таблицу SQL, как упоминалось [здесь, у](https://stackoverflow.com/questions/549200/write-dataset-to-sql-table) меня закончилась нехватка памяти. 

 Как я могу это сделать? 

 Не рекомендуется использовать DataTable для 1 M строк, вы можете просто создать новый SqlComand для INSERT и сделать все поля таблицы параметрами и запустить эту команду в цикле. 

 Но если вы уже написали много кода с помощью DataTable, вы можете рассматривать его как буфер и иметь следующее обходное решение: 

 1) насколько вы читаете строки данных, проверьте, сколько уже было прочитано до сих пор 

 2) как только вы получите 10K строк, вы выполняете DataTable.Update (); 

 (вы можете вызвать этот параметр как buffer\_size и поместить где-то в конфигурацию, чтобы избежать жесткого кодирования) 

 3), то вы очищаете все данные в DataTable, вызывая 

```
DataTable.Clear(); 
DataTable.AcceptChanges();

```
  4) вы продолжаете читать данные из файла, повторяете цикл 

---

 Кроме того, трудно сделать общие предложения, не зная структуру вашего файла и цели приложения, я ответил только на вопрос, как избежать «нехватки памяти» при использовании очень больших наборов данных. Но я также рекомендую рассмотреть все возможные варианты, чтобы избежать использования таблиц данных .NET в качестве промежуточного хранилища данных и файла процесса напрямую со всеми возможными средствами, предоставляемыми SQL-сервером, такими как 

 1) BULK INSERT - <http://msdn.microsoft.com/en-us/library/ms188365.aspx> 

 2) Утилита bcp - <http://msdn.microsoft.com/en-us/library/ms162802.aspx> 

 3) Межсетевые службы MS SQL - <http://msdn.microsoft.com/en-us/library/ms141026.aspx> 

 операции массовой вставки с использованием любой из этих команд и инструментов могут быть инициированы с .NET.