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

Definition

Gibt den Wert der angegebenen Spalte als Zeichenarray zurück.

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

Parameter

ordinal
Int32

Die nullbasierte Spalten-Ordnungszahl.

dataIndex
Int64

Der Index innerhalb des Felds, aus dem der Lesevorgang gestartet werden soll.

buffer
Char[]

Der Puffer, in den der Datenstrom von Zeichen gelesen werden soll.

bufferIndex
Int32

Der Index innerhalb des Puffers, an dem die Daten platziert werden sollen.

length
Int32

Die maximale Länge, die in den Puffer kopiert werden soll.

Gibt zurück

Die tatsächliche Anzahl der gelesenen Zeichen.

Ausnahmen

Der übergebene Index liegt außerhalb des Bereichs von 0 bis FieldCount -1.

Es wurde versucht, Daten aus einer gelöschten Zeile abzurufen.

Es wurde versucht, eine Spalte in einer geschlossenen DataTableReaderSpalte zu lesen oder darauf zuzugreifen.

Die angegebene Spalte enthält kein Zeichenarray.

Beispiele

Im folgenden Beispiel wird die GetChars Methode veranschaulicht. Die TestGetChars Methode erwartet, dass eine DataTableReader gefüllte Mit zwei Datenspalten übergeben wird: ein Dateiname in der ersten Spalte und ein Array von Zeichen im zweiten. Darüber hinaus können Sie die Puffergröße angeben, TestGetChars die beim Lesen der Daten aus dem Zeichenarray in der DataTableReaderZeichenfolge verwendet werden soll. TestGetChars erstellt eine Datei, die DataTableReaderjeder Datenzeile im Feld entspricht, wobei die bereitgestellten Daten in der ersten Spalte des DataTableReader Dateinamens verwendet werden.

Dieses Verfahren veranschaulicht die Verwendung der GetChars Methodenlesedaten, die DataTable als Zeichenarray gespeichert wurden. Jede andere Art von Daten bewirkt, dass die GetChars Methode eine 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

Hinweise

GetChars gibt die Anzahl der verfügbaren Zeichen im Feld zurück. Meistens ist dies die genaue Länge des Felds. Die zurückgegebene Zahl kann jedoch kleiner als die tatsächliche Länge des Felds sein, wenn GetChars bereits zum Abrufen von Zeichen aus dem Feld verwendet wurde.

Die tatsächliche Anzahl der gelesenen Zeichen kann kleiner als die angeforderte Länge sein, wenn das Ende des Felds erreicht ist. Wenn Sie einen Puffer übergeben, der null ist (Nothing in Visual Basic), gibt GetChars die Länge des gesamten Felds in Zeichen zurück, nicht die verbleibende Größe basierend auf dem Pufferoffsetparameter.

Es werden keine Konvertierungen ausgeführt; Daher müssen die abzurufenden Daten bereits ein Zeichenarray oder ein Zeichenarray sein.

Gilt für: