2016-01-22 3 views
0

Есть ли какое-либо решение, которое я могу добавить к одному файлу данных.Добавить данные в datatable

Пример: у меня есть цикл, который выполняет запрос «Выбрать» в базе данных. Я сохраняю результат в виде данных. Во втором цикле я снова выполним запрос «Выбрать», но на этот раз я получу разные результаты. Есть ли способ, я могу хранить все эти данные в один DataTable без потери данных из предыдущего цикла

пустышки например

For i = 0 To 10 
     _cmd.CommandText = _sQ ' With different parameter in this query 
     _da.SelectCommand = _cmd 
     _da.Fill(_dt) 
    Next 

В конце моего _dt должен содержать все данные из этого 10 итераций.

ответ

1

метод DataAdapter.Fill будет добавлять строки к DataTable автоматически:

Вы можете использовать метод Fill несколько раз на том же DataTable. Если существует первичный ключ , входящие строки объединяются с соответствующими строками, которые уже существуют . Если первичный ключ не существует, входящие строки добавляются к DataTable.

Так что ваш код делает уже то, что вы хотите:

For i = 0 To 10 
    _cmd.CommandText = _sQ ' With different parameter in this query 
    _da.SelectCommand = _cmd 
    _da.Fill(_dt) 
Next 

Пока вы не указали первичный ключ столбца (ов) сами вы не в «опасности» обновлений. Все строки добавляются в таблицу. Я протестировал его.

0

Вы можете установить динамический список для результата и добавить новый результат для каждого результата.

Позже вы можете просто пойти лист корыта

1

Если я знаю, что у меня был только один ряд в результатах, я, вероятно, не буду заполнить DataTable каждый раз, но ответить на ваш вопрос, вы можете сохранить один DataTable ссылки в качестве основная таблица и объединить таблицу в нее на каждой итерации:

Dim mainDT As New DataTable() 
For i = 0 To 10 
    Dim dt As New DataTable() 
    _cmd.CommandText = _sQ ' With different parameter in this query 
    _da.SelectCommand = _cmd 
    _da.Fill(dt) 
    mainDT.Merge(dt) 
Next 
+0

На самом деле никто не сказал, что это будет один ряд. Иногда иногда бывает около 200 строк. – myString

+0

@myString, мой плохой, я прочитал «все данные из этих 10 итераций», что означает 10 строк. Ты прав. – Crowcoder

+0

@Crowcoder: нет необходимости объединять таблицы, 'DataAdaper.Fill' уже добавляет строки в существующую таблицу по умолчанию. –

0

Лучшим решением здесь является устранение цикла и изменение вашего sql для обработки всех запросов за один шаг. Есть два способа сделать это. Первый и лучший метод состоит в том, чтобы проанализировать ваши 10 SQL-операторов и получить их до одного оператора.

Второй метод менее эффективен, но проще. Просто объедините свои команды SQL в запрос UNION:

Dim mainDT As New DataTable() 
For i = 0 To 10 
    _cmd.CommandText = _cmd.CommandText & " UNION & " & _sQ ' With different parameter in this query 
Next 
_da.SelectCommand = _cmd 
_da.Fill(mainDT) 
Смежные вопросы