Как я могу скопировать содержимое DataTable в таблицу SQL, пока я ее заполняю - PullRequest
1 голос
/ 29 июля 2011

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

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

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

Если я заполняю всю DataTable, а затем использую SqlAdapter и SqlCommandBuilder для обновлениятаблица SQL, как упоминалось, здесь У меня недостаточно памяти.

Как мне это сделать?

1 Ответ

2 голосов
/ 15 августа 2011

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

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

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

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

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

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

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

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


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

1) БОЛЬШАЯ ВСТАВКА - http://msdn.microsoft.com/en-us/library/ms188365.aspx

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

3) Службы MS SQL Intergartion - http://msdn.microsoft.com/en-us/library/ms141026.aspx

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

...