Fill(Int32, Int32, DataTable)

Метод реализует добавление или обновление строк в объекте DataTable из части таблицы в источнике данных.

Например, таблица X содержит 1 млн. записей. Данный метод позволяет выполнить частичную загрузку этой таблицы в DataTable, например, 100 записей, начиная c 500001.

Примечание

В клиентских приложениях, ориентированных на работу исключительно с СУБД ЛИНТЕР, вместо данного метода можно использовать конструкцию «ограничение выборки» select-запроса:

< ограничение выборки >::=
FETCH FIRST < объем выборки > [PERCENT] [WITH TIES]
| LIMIT  [< начало выборки >,] < количество строк >

Описание работы метода см. в подпункте Fill(DataTable).

Синтаксис
  public int Fill(
    int startRecord,
    int maxRecords,
    params DataTable[] dataTables
);
      

startRecord – начальный номер строки в источнике данных, с которой необходимо начать добавление (обновление) строк в DataTable.

Отсчет начинается с 0.

maxRecords – максимальное число извлекаемых из источника данных строк.

Если значение maxRecords равно 0, то извлекаются все строки, найденные после начальной строки. Если maxRecords больше, чем число оставшихся строк, возвращаются только оставшиеся строки и ошибка не выдается.

dataTables – массив объектов DataTable, который необходимо заполнить данными.

При обработке пакетных запросов данные, полученные каждым запросом, загружаются в отдельный объект DataTable. Если методу передано недостаточно объектов DataTable, то получение данных завершается после заполнения всех объектов DataTable и ошибка не возникает. Если указаны ненулевые значения параметров startRecord или maxRecords, то в массиве dataTables должен быть только один элемент.

Возвращаемое значение

Количество строк, реально добавленных или обновленных в объекте DataTable.

Примечание

Хотя вся выборка данных, создаваемая SQL-запросом, передается с ЛИНТЕР-сервера на клиентский компьютер, тем не менее, объект DataTable не будет содержать больше записей, чем указано в maxRecords.

Исключения
ArgumentNullException Параметр dataTables содержит null-значение.
ArgumentException Значение параметра startRecord или параметра maxRecords меньше 0.
InvalidOperationException Свойство SelectCommand не инициализировано или массив dataTables частично заполнен при ненулевых значениях параметра startRecord или maxRecords.
LinterSqlException Код завершения СУБД ЛИНТЕР не равен 0.
Пример

Загрузить в DataTable семь записей выборки из двух таблиц, начиная с 25.

1) Стандартный метод.

// C#
using System;
using System.Data;
using System.Data.Common;

class FillSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString =
      "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8";
    // Создание объекта DbDataAdapter
    DbDataAdapter adapter = factory.CreateDataAdapter();
    adapter.SelectCommand = factory.CreateCommand();
    adapter.SelectCommand.Connection = con;
    adapter.SelectCommand.CommandText =
      "select model, make " +
      "from auto, person " +
      "where auto.personid=person.personid and name like 'A%'";
    // Создание объекта DataTable
    DataTable table = new DataTable();
    // Заполнение объекта DataTable данными из таблицы БД
    adapter.Fill(25, 7, table);
    // Отображение полученных данных
    Console.WriteLine("Строки таблицы:");
    foreach (DataRow row in table.Rows)
    {
      foreach (DataColumn column in table.Columns)
      {
        Console.Write("{0} | ", row[column.ColumnName]);
      }
      Console.WriteLine();
    }
  }
}

2) Только при работе с ЛИНТЕР-сервером.

// C#
using System;
using System.Data;
using System.Data.LinterClient;

class FillSample
{
  static void Main()
  {
    // Создание объекта LinterDbDataAdapter
    LinterDbDataAdapter adapter = new LinterDbDataAdapter(
      "select model, make from auto, person " +
      "where auto.personid=person.personid and name like 'A%' limit 25, 7",
      "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8");
    // Создание объекта DataTable
    DataTable table = new DataTable();
    // Заполнение объекта DataTable данными из таблицы БД
    adapter.Fill(table);
    // Отображение полученных данных
    Console.WriteLine("Строки таблицы:");
    foreach (DataRow row in table.Rows)
    {
      foreach (DataColumn column in table.Columns)
      {
        Console.Write("{0} | ", row[column.ColumnName]);
      }
      Console.WriteLine();
    }
  }
}