DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) Method

Определение

Возвращает значение указанного столбца в виде массива символов.Returns the value of the specified column as a character array.

public:
 override long GetChars(int ordinal, long dataIndex, cli::array <char> ^ buffer, int bufferIndex, int length);
public override long GetChars (int ordinal, long dataIndex, char[] buffer, int bufferIndex, int length);
override this.GetChars : int * int64 * char[] * int * int -> int64
Public Overrides Function GetChars (ordinal As Integer, dataIndex As Long, buffer As Char(), bufferIndex As Integer, length As Integer) As Long

Параметры

ordinal
Int32 Int32 Int32 Int32

Порядковый номер столбца (от нуля).The zero-based column ordinal.

dataIndex
Int64 Int64 Int64 Int64

Индекс в поле, с которого необходимо начать считывание.The index within the field from which to start the read operation.

buffer
Char[]

Буфер, в который необходимо считать поток данных с типом char.The buffer into which to read the stream of chars.

bufferIndex
Int32 Int32 Int32 Int32

Индекс в буфере, начиная с которого будут помещаться данные.The index within the buffer at which to start placing the data.

length
Int32 Int32 Int32 Int32

Максимальная длина для копирования в буфер.The maximum length to copy into the buffer.

Возвраты

Число фактически считанных символов.The actual number of characters read.

Исключения

Переданный индекс находился вне диапазона от 0 до FieldCount - 1.The index passed was outside the range of 0 to FieldCount - 1.

Предпринята попытка извлечения данных из удаленной строки.An attempt was made to retrieve data from a deleted row.

Предпринята попытка чтения или доступа к столбцу закрытого объекта DataTableReader.An attempt was made to read or access a column in a closed DataTableReader.

Указанный столбец не содержит массива знаков.The specified column does not contain a character array.

Примеры

В следующем примере демонстрируется GetChars метод.The following example demonstrates the GetChars method. Метод должен передаваться заполненным двумя столбцами данных: именем файла в первом столбце и массивом символов во втором. DataTableReader TestGetCharsThe TestGetChars method expects to be passed a DataTableReader filled with two columns of data: a file name in the first column, and an array of characters in the second. Кроме того, TestGetChars позволяет указать размер буфера, который будет использоваться при чтении данных из массива символов DataTableReaderв.In addition, TestGetChars lets you specify the buffer size to be used as it reads the data from the character array in the DataTableReader. TestGetCharsсоздает файл DataTableReader, соответствующий каждой строке данных в, используя указанные данные в первом столбце DataTableReader в качестве имени файла.TestGetChars creates a file corresponding to each row of data in the DataTableReader, using the supplied data in the first column of the DataTableReader as the file name.

В этой процедуре демонстрируется использование GetChars метода чтения данных, сохраненных в в DataTable виде массива символов.This procedure demonstrates the use of the GetChars method reading data that was stored in the DataTable as a character array. Любой другой тип данных приводит к тому GetChars , что метод выдает InvalidCastExceptionисключение.Any other type of data causes the GetChars method to throw an InvalidCastException.

using System;
using System.Data;
using System.IO;

class Class1
{
    static void Main()
    {
        DataTable table = new DataTable();
        table.Columns.Add("FileName", typeof(string));
        table.Columns.Add("Data", typeof(char[]));
        table.Rows.Add(new object[] { "File1.txt", "0123456789ABCDEF".ToCharArray() });
        table.Rows.Add(new object[] { "File2.txt", "0123456789ABCDEF".ToCharArray() });

        DataTableReader reader = new DataTableReader(table);
        TestGetChars(reader, 7);
    }

    private static void TestGetChars(DataTableReader reader, int bufferSize)
    {
        // The filename is in column 0, and the contents are in column 1.
        const int FILENAME_COLUMN = 0;
        const int DATA_COLUMN = 1;

        char[] buffer;
        long offset;
        int charsRead = 0;
        string fileName;
        int currentBufferSize = 0;

        while (reader.Read())
        {
            // Reinitialize the buffer size and the buffer itself.
            currentBufferSize = bufferSize;
            buffer = new char[bufferSize];
            // For each row, write the data to the specified file.
            // First, verify that the FileName column isn't null.
            if (!reader.IsDBNull(FILENAME_COLUMN))
            {
                // Get the file name, and create a file with 
                // the supplied name.
                fileName = reader.GetString(FILENAME_COLUMN);
                // Start at the beginning.
                offset = 0;

                using (StreamWriter outputStream =
                           new StreamWriter(fileName, false))
                {
                    try
                    {
                        // Loop through all the characters in the input field,
                        // incrementing the offset for the next time. If this
                        // pass through the loop reads characters, write them to 
                        // the output stream.
                        do
                        {
                            charsRead = (int)reader.GetChars(DATA_COLUMN, offset,
                                buffer, 0, bufferSize);
                            if (charsRead > 0)
                            {
                                outputStream.Write(buffer, 0, charsRead);
                                offset += charsRead;
                            }
                        } while (charsRead > 0);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(fileName + ": " + ex.Message);
                    }
                }
            }
        }
        Console.WriteLine("Press Enter key to finish.");
        Console.ReadLine();
    }
}
Imports System.Data
Imports System.IO

Module Module1

   Private Sub TestGetChars( _
      ByVal reader As DataTableReader, ByVal bufferSize As Integer)

      ' The filename is in column 0, and the contents are in column 1.
      Const FILENAME_COLUMN As Integer = 0
      Const DATA_COLUMN As Integer = 1

      Dim buffer() As Char
      Dim offset As Integer
      Dim charsRead As Integer
      Dim fileName As String
      Dim currentBufferSize As Integer

      While reader.Read
         ' Reinitialize the buffer size and the buffer itself.
         currentBufferSize = bufferSize
         ReDim buffer(bufferSize - 1)

         ' For each row, write the data to the specified file.

         ' First, verify that the FileName column isn't null.
         If Not reader.IsDBNull(FILENAME_COLUMN) Then
            ' Get the file name, and create a file with 
            ' the supplied name.
            fileName = reader.GetString(FILENAME_COLUMN)

            ' Start at the beginning.
            offset = 0

            Using outputStream As New StreamWriter(fileName, False)
               Try

                  ' Loop through all the characters in the input field,
                  ' incrementing the offset for the next time. If this
                  ' pass through the loop reads characters, write them to 
                  ' the output stream.
                  Do
                     charsRead = Cint(reader.GetChars(DATA_COLUMN, offset, _
                        buffer, 0, bufferSize))
                     If charsRead > 0 Then
                        outputStream.Write(buffer, 0, charsRead)
                        offset += charsRead
                     End If
                  Loop While charsRead > 0
               Catch ex As Exception
                  Console.WriteLine(fileName & ": " & ex.Message)
               End Try
            End Using
         End If
      End While
      Console.WriteLine("Press Enter key to finish.")
      Console.ReadLine()
   End Sub

   Sub Main()
      Dim table As New DataTable
      table.Columns.Add("FileName", GetType(System.String))
      table.Columns.Add("Data", GetType(System.Char()))
      table.Rows.Add("File1.txt", "0123456789ABCDEF".ToCharArray)
      table.Rows.Add("File2.txt", "0123456789ABCDEF".ToCharArray)

      Dim reader As New DataTableReader(table)
      TestGetChars(reader, 7)
   End Sub
End Module

Комментарии

GetCharsВозвращает количество доступных символов в поле.GetChars returns the number of available characters in the field. В большинстве случаев это точная длина поля.Most of the time this is the exact length of the field. Однако возвращаемое число может быть меньше истинной длины поля, если GetChars уже используется для получения символов из поля.However, the number returned may be less than the true length of the field if GetChars has already been used to obtain characters from the field.

Фактическое число считываемых символов может быть меньше запрошенной длины, если достигнут конец поля.The actual number of characters read can be less than the requested length, if the end of the field is reached. Если передать буфер, имеющий значение null (Nothing в Visual Basic), GetChars возвращает длину всего поля в символах, а не оставшийся размер, основанный на параметре смещения буфера.If you pass a buffer that is null (Nothing in Visual Basic), GetChars returns the length of the entire field in characters, not the remaining size based on the buffer offset parameter.

Преобразования не выполняются; Поэтому извлекаемые данные должны уже быть массивом символов или приводиться к массиву символов.No conversions are performed; therefore the data to be retrieved must already be a character array or coercible to a character array.

Применяется к