UpdateBatchSize
Свойство задает/отменяет режим пакетного обновления записей и предоставляет или устанавливает размерность пакета обновлений.
Свойство UpdateBatchSize используется для обновления источника данных с учетом изменений, полученных из объекта DataSet
. Пакетная обработка позволяет увеличить производительность клиентского приложения за счет сокращения количества циклов приема-передачи для обработки данных на ЛИНТЕР-сервере.
Выполнение слишком большого пакета может привести к снижению производительности. Поэтому перед реализацией клиентского приложения рекомендуется выполнить тестирование с целью определить оптимальный размер пакета.
При пакетной вставке тип поля в объекте DataTable должен соответствовать типу поля в таблице СУБД ЛИНТЕР. Допустимые типы приведены в таблице 30. Если при конвертации данных происходит ошибка, то метод DbDataAdapter.Update() генерирует исключение. Если конвертация не выполняется, то пакетная вставка работает быстрее.
Тип колонки в объекте DataTable | Допустимый тип СУБД ЛИНТЕР | Конвертации данных |
---|---|---|
System.Int16 или System.SByte | SMALLINT | Конвертация не выполняется |
System.Int16 или System.SByte | INT | Конвертация выполняется |
System.Int16 или System.SByte | BIGINT | Конвертация выполняется |
System.Int32 или System.UInt16 | SMALLINT | Конвертация выполняется и генерируется исключение типа OverflowException если значение превышает допустимые пределы |
System.Int32 или System.UInt16 | INT | Конвертация не выполняется |
System.Int32 или System.UInt16 | BIGINT | Конвертация выполняется |
System.Int64 или System.UInt32 | SMALLINT | Конвертация выполняется и генерируется исключение типа OverflowException если значение превышает допустимые пределы |
System.Int64 или System.UInt32 | INT | Конвертация выполняется и генерируется исключение типа OverflowException если значение превышает допустимые пределы |
System.Int64 или System.UInt32 | BIGINT | Конвертация не выполняется |
System.Single | REAL | Конвертация не выполняется |
System.Single | DOUBLE | Конвертация выполняется |
System.Double | REAL | Конвертация выполняется и генерируется исключение типа Exception если значение превышает допустимые пределы |
System.Double | DOUBLE | Конвертация не выполняется |
System.Decimal или System.UInt64 | DECIMAL | Конвертация не выполняется |
System.Decimal или System.UInt64 | REAL | Конвертация выполняется и генерируется исключение типа Exception если значение превышает допустимые пределы |
System.Decimal или System.UInt64 | DOUBLE | Конвертация выполняется |
System.DateTime | DATE | Конвертация не выполняется |
System.Byte | BYTE(1) | Конвертация не выполняется |
System.Byte | VARBYTE(1) | Конвертация не выполняется |
System.Byte[] | BYTE(< длина >) | Конвертация не выполняется |
System.Byte[] | VARBYTE(< длина >) | Конвертация не выполняется |
System.Boolean | BOOLEAN | Конвертация не выполняется |
System.Char | NCHAR(1) | Конвертация не выполняется |
System.Char | NVARCHAR(1) | Конвертация не выполняется |
System.Char | CHAR(1) | Конвертация выполняется |
System.Char | VARCHAR(1) | Конвертация выполняется |
System.String | NCHAR(< длина >) | Конвертация не выполняется |
System.String | NVARCHAR(< длина >) | Конвертация не выполняется |
System.String | CHAR(< длина >) | Конвертация выполняется |
System.String | VARCHAR(< длина >) | Конвертация выполняется |
System.Guid | BYTE(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); } }