ADO.Net - усечение данных столбца при добавлении DataRow в DataTable - PullRequest
2 голосов
/ 16 сентября 2011

Это мой первый пост в Stackoverflow.

Я читаю миллионы строк из плоского файла (через запятую) и повторяю каждую строку чтения, а затем каждый столбец каждой строки.Итерация каждого столбца позволяет выполнять определенные пользователем преобразования, значения по умолчанию, удаление специальных символов и т. Д.Текущая реализация очень эффективна.

Чтение данных выполняется партиями по 20 КБ.Когда я обрабатываю строку чтения, я запускаю вызов NewRow () для моей таблицы данных в памяти.Затем я начинаю итерацию каждого столбца, чтобы очистить их значения.Я пытаюсь свести к минимуму столько, сколько могу при обработке столбцов строк.

Моя проблема заключается в следующем.Если значение (в данном случае текст), которое читается из плоского файла, длиннее, чем MaxLength целевого DataTables DataColumn, я получаю исключение, например, когда я выдаю следующее:

dataTable.Rows.Add(newRow);

Есть лиспособ сказать ADO.Net (или моей DataTable в памяти) обрезать данные вместо того, чтобы жаловаться?

Опять же, я могу легко добавить логику в цикл, чтобы выполнить эту проверку / усечение для меня, но тевсе складывается, когда вы имеете дело с миллионами строк данных.

1 Ответ

0 голосов
/ 16 сентября 2011

примерно так должно работать:

var newRow = dataTable.NewRow();

...
...

if(YourText.Length < ColumnMaxLength)
{
  newRow["YourLimitedColumnName"] = YourText;
}
else
{
  newRow["YourLimitedColumnName"] = YourText.Substring(0, ColumnMaxLength);
}

...
...

dataTable.Rows.Add(newRow);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...