UpdateBatchSize

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

Свойство UpdateBatchSize используется для обновления источника данных с учетом изменений, полученных из объекта DataSet. Пакетная обработка позволяет увеличить производительность клиентского приложения за счет сокращения количества циклов приема-передачи для обработки данных на ЛИНТЕР-сервере.

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

При пакетной вставке тип поля в объекте DataTable должен соответствовать типу поля в таблице СУБД ЛИНТЕР. Допустимые типы приведены в таблице 30. Если при конвертации данных происходит ошибка, то метод DbDataAdapter.Update() генерирует исключение. Если конвертация не выполняется, то пакетная вставка работает быстрее.

Таблица 30. Соответствие типов данных при пакетной вставке
Тип колонки в объекте DataTableДопустимый тип СУБД ЛИНТЕРКонвертации данных
System.Int16 или System.SByteSMALLINTКонвертация не выполняется
System.Int16 или System.SByteINTКонвертация выполняется
System.Int16 или System.SByteBIGINTКонвертация выполняется
System.Int32 или System.UInt16SMALLINTКонвертация выполняется и генерируется исключение типа OverflowException если значение превышает допустимые пределы
System.Int32 или System.UInt16INTКонвертация не выполняется
System.Int32 или System.UInt16BIGINTКонвертация выполняется
System.Int64 или System.UInt32SMALLINTКонвертация выполняется и генерируется исключение типа OverflowException если значение превышает допустимые пределы
System.Int64 или System.UInt32INTКонвертация выполняется и генерируется исключение типа OverflowException если значение превышает допустимые пределы
System.Int64 или System.UInt32BIGINTКонвертация не выполняется
System.SingleREALКонвертация не выполняется
System.SingleDOUBLEКонвертация выполняется
System.DoubleREALКонвертация выполняется и генерируется исключение типа Exception если значение превышает допустимые пределы
System.DoubleDOUBLEКонвертация не выполняется
System.Decimal или System.UInt64DECIMALКонвертация не выполняется
System.Decimal или System.UInt64REALКонвертация выполняется и генерируется исключение типа Exception если значение превышает допустимые пределы
System.Decimal или System.UInt64DOUBLEКонвертация выполняется
System.DateTimeDATEКонвертация не выполняется
System.ByteBYTE(1)Конвертация не выполняется
System.ByteVARBYTE(1)Конвертация не выполняется
System.Byte[]BYTE(< длина >)Конвертация не выполняется
System.Byte[]VARBYTE(< длина >)Конвертация не выполняется
System.BooleanBOOLEANКонвертация не выполняется
System.CharNCHAR(1)Конвертация не выполняется
System.CharNVARCHAR(1)Конвертация не выполняется
System.CharCHAR(1)Конвертация выполняется
System.CharVARCHAR(1)Конвертация выполняется
System.StringNCHAR(< длина >)Конвертация не выполняется
System.StringNVARCHAR(< длина >)Конвертация не выполняется
System.StringCHAR(< длина >)Конвертация выполняется
System.StringVARCHAR(< длина >)Конвертация выполняется
System.GuidBYTE(16)Конвертация не выполняется

Значение по умолчанию 1.

Примечание

В текущей версии ADO.NET-провайдера пакетная обработка данных поддерживается только для вставки записей (INSERT). Обновление (UPDATE) и удаление (DELETE) записей выполняется отдельно для каждой записи. Также отдельно обрабатываются записи, содержащие BLOB-данные и команды, использующие хранимые процедуры.

Декларация
public virtual int UpdateBatchSize {get; set;};
Значение свойства

Количество строк, которые необходимо обработать с помощью одного пакета:

  • 0 – включает пакетный режим и устанавливает неограниченный размер пакета обновлений;

  • 1 – отключает режим пакетного обновления (значение по умолчанию);

  • больше 1 – включает пакетный режим и устанавливает размерность пакета обновлений. В этом случае во всех командах, связанных с объектом DbDataAdapter, для свойства UpdatedRowSource должно быть установлено значение None или OutputParameters. В противном случае будет выдаваться исключение.

Исключения
ArgumentOutOfRangeException Размерность пакета обновления меньше 0.
Пример
// C#
using System;
using System.Data;
using System.Data.Common;

class UpdateBatchSizeSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString =
      "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8";
    // Создание таблицы БД
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    cmd.CommandText =
      "create or replace table users ( " +
      "id integer primary key, name varchar(70))";
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    // Создание команды для выборки записей
    DbCommand selectCommand = factory.CreateCommand();
    selectCommand.Connection = con;
    selectCommand.CommandText =
      "select id, name from users";
    // Создание параметров для добавления записей
    DbParameter parId = factory.CreateParameter();
    parId.ParameterName = ":id";
    parId.SourceColumn = "id";
    parId.Direction = ParameterDirection.Input;
    parId.DbType = DbType.Int32;
    DbParameter parName = factory.CreateParameter();
    parName.ParameterName = ":name";
    parName.SourceColumn = "name";
    parName.Direction = ParameterDirection.Input;
    parName.DbType = DbType.String;
    parName.Size = 70;
    // Создание команды для добавления записи
    DbCommand insertCommand = factory.CreateCommand();
    insertCommand.Connection = con;
    insertCommand.CommandText =
      "insert into users (id,name) values (:id,:name)";
    insertCommand.Parameters.Add(parId);
    insertCommand.Parameters.Add(parName);
    insertCommand.UpdatedRowSource = UpdateRowSource.None;
    // Создание объекта DbDataAdapter
    DbDataAdapter adapter = factory.CreateDataAdapter();
    adapter.SelectCommand = selectCommand;
    adapter.InsertCommand = insertCommand;
    adapter.UpdateBatchSize = 2;
    // Заполнение объекта DataTable данными из таблицы БД
    DataTable users = new DataTable();
    adapter.Fill(users);
    // Добавление записей в таблицу DataTable
    users.Rows.Add(0, "Пользователь A");
    users.Rows.Add(1, "Пользователь B");
    // Обновление БД
    int recordsAffected = adapter.Update(users);
    Console.WriteLine("Обработано строк: " + recordsAffected);
  }
}