DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) メソッド

定義

指定された列の値を 1 つの文字配列として返します。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

0 から始まる列序数。The zero-based column ordinal.

dataIndex
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

バッファー内でデータの配置を開始するインデックス。The index within the buffer at which to start placing the data.

length
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. メソッドTestGetCharsは、データの2つDataTableReaderの列 (最初の列のファイル名) と2番目の列の文字配列で、入力されたを渡すことを想定しています。The 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.

適用対象