2015-05-25 4 views
1

Я работаю над крупномасштабной вставкой/обновлением.IDataReader vs DataTable; за и против

Так что я использую SqlBulkCopy.

SqlConnection myConnection = new SqlConnection(myConnectionString); 

try 
{ 
    myConnection.Open(); 
    SqlBulkCopy myCommand = new SqlBulkCopy(myConnection); 

    myCommand.DestinationTableName = "myDestinationTableName"; 

    //Below method has four overloads; 
    //of which I am interested in the two mentioned below. 
    myCommand.WriteToServer(); 

    myCommand.Close(); 
} 
finally 
{ 
    myConnection.Close(); 
} 

Но я наткнулся на эти две версии WriteToServer метода.

  1. SqlBulkCopy.WriteToServer Method (IDataReader)

  2. SqlBulkCopy.WriteToServer Method (DataTable)

Вопрос: Каковы плюсы и минусы одного над другим? Какой из них быстрее?

ответ

2

С чехлом по умолчанию, оба должен иметь одинаковую производительность в противном случае horses ..

Но есть одна разницы, хотя, WriteToServer с DataTable в качестве параметра будет вставлять все строки из DataTable, но с IDataReader копией начинается с следующей строкой в читателе (который будет установлен в первую строку в случае по умолчанию).

Помните, что IDataReader предоставляет механизм только для чтения/перехода вперед, поэтому существует концепция текущего положения/индекса строки, тогда как с DataTable такой вещи нет. С каждым Read на IDataReader указатель строки перемещается в следующую строку.

1

Перегрузка с DataTable предназначена для случаев, когда у вас уже есть подходящий DT где-то в вашем приложении.

Перегрузка с IDataReader, в свою очередь, предназначена для случаев, когда есть какой-либо запрос (текст необработанного запроса или построенная команда, это не имеет значения). В этом случае создание промежуточного контейнера данных, такого как DT, не требуется. Следовательно, эта перегрузка позволяет получать данные непосредственно от читателя.

Предполагая, что у вас нет ни DT, ни IDataReader, то второй должен по крайней мере потреблять меньше ресурсов.

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

  • Нет связанных вопросов^_^