GetChars

Метод предоставляет приведенный к типу данных char[] (в UTF-16 кодировке) массив данных указанного поля текущей строки выборки данных. Т.к. в текущей версии ADO.NET-провайдера приведение типов не выполняется, то корректно метод может применяться только к полям с типом данных char, varchar, nchar, nvarchar, иначе будет выдано исключение.

Синтаксис
public abstract long GetChars(
    int ordinal,
    long dataOffset,
    char[] buffer,
    int bufferOffset,
    int length
);

ordinal – источник данных (порядковый номер поля в текущей строке выборки данных (отсчет начинается с 0)).

dataOffset – местоположение извлекаемых данных в источнике данных (номер позиции в указанном поле текущей строки, начиная с которой должны извлекаться данные (отсчет начинается с 0)).

buffer – приемник данных (буфер в памяти для размещения извлеченных данных).

bufferOffset – местоположение данных в приемнике данных (номер позиции в приемнике данных, начиная с которой должно выполняться размещение извлеченных данных (отсчет начинается с 0)).

length – количество запрашиваемых данных в символах.

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

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

Если значение buffer равно null, то возвращается длина запрошенного поля (независимо от заданного в нем смещения). Сами данные не предоставляются.

Исключения
InvalidCastException Невозможно преобразовать тип данных указанного столбца к типу данных char[].
IndexOutOfRangeException Задан порядковый номер несуществующего столбца.
InvalidOperationException Не установлена текущая строка выборки данных (необходимо выполнить метод Read()).
ArgumentException Местоположение в источнике за пределами поля.
ArgumentException Местоположение в приемнике за пределами буфера.
ArgumentException Недопустимая длина.
Пример
// C#
using System;
using System.Data;
using System.Data.Common;
using System.Text;

class GetChars
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString =
      "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8";
    con.Open();
    // Создание объекта DbCommand
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    // Формирование текста SQL-запроса
    cmd.CommandText =
      "Select 'ADO.NET-провайдер СУБД ЛИНТЕР'";
    // Выполнение SQL-запроса
    DbDataReader reader = cmd.ExecuteReader();
    // Обработка результатов запроса
    Char[] value = new Char[11];
    while (reader.Read())
    {
      reader.GetChars(0, 18, value, 0, 11);
    }
    Console.WriteLine(new String(value));
    // Освобождение ресурсов
    reader.Dispose();
    cmd.Dispose();
    con.Dispose();
  }
}

Результат выполнения примера:

СУБД ЛИНТЕР