2013-03-18 2 views
1

Я использую OLEDB для вставки данных в файл DB4 .dbf. Вставка 13 строк занимает почти 1 минуту, так как это очень удобно при вставке в одну таблицу, которая содержит десятичные десятичные и десятичные числа. Есть ли альтернативные более быстрые способы сделать это?Вставка файла dbf Возьмите длинное время

` foreach (DataRow row in fstathotel.Rows) 
      { 
       cmd.CommandText = @"insert into fstathote values (" + Convert.ToInt32(row["mpe"]) + ",'" + Convert.ToDateTime(row["date"]) + "','" + row["type"].ToString() + "',?,'" + Convert.ToDateTime(row["edate"]) + "')"; 
       cmd.Parameters.AddWithValue("parmSlot1", Decimal.Parse(row["value"].ToString())); 
       cmd.ExecuteNonQuery(); 
      }` 
+0

показать код вставки – Alex

+0

Я использовал DataTable для запуска данных, и я прошел через Datable с помощью foreach dataRow – SKGeek

+0

Я полагаю, что-то не так с вашим db, это не должно занять время. Постарайтесь выполнить пошаговое отладки и посмотреть время, которое требуется каждой операции. И попробуйте сделать комбинированный текстовый запрос со всеми 13 вставками и посмотреть результаты – Alex

ответ

2

Вы делаете cmd.Parameters.AddWithValue в петле.

Это означает, что на каждой итерации добавляется параметр. Я не знаю о DB4, но я бы поспорил, что драйверы OleDB пытаются обрабатывать дополнительные дополнительные неиспользованные параметры, насколько это возможно. Это удается, но операция занимает гораздо больше времени.

Пожалуйста, вставьте cmd.Parameters.Clear() вот так, и скажите, все ли работает лучше.

foreach (DataRow row in fstathotel.Rows) 
{ 
    cmd.CommandText = @"insert into fstathote values (" + Convert.ToInt32(row["mpe"]) + ",'" + Convert.ToDateTime(row["date"]) + "','" + row["type"].ToString() + "',?,'" + Convert.ToDateTime(row["edate"]) + "')"; 
    cmd.Parameters.Clear(); // Clear the parameter list 
    cmd.Parameters.AddWithValue("parmSlot1", Decimal.Parse(row["value"].ToString())); 
    cmd.ExecuteNonQuery(); 
} 

Кроме того, я также попытаюсь заключить цикл в транзакцию базы данных. Помните, что слишком много индексов на столе плохо для выполнения вставки.

+0

Спасибо, эта вставка быстрее, чем раньше – SKGeek

Смежные вопросы