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

Definitie

Retourneert de waarde van de opgegeven kolom als een tekenmatrix.

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

Parameters

ordinal
Int32

De op nul gebaseerde kolomordinaal.

dataIndex
Int64

De index in het veld van waaruit de leesbewerking moet worden gestart.

buffer
Char[]

De buffer waarin de stroom van tekens moet worden gelezen.

bufferIndex
Int32

De index binnen de buffer waar de gegevens moeten worden geplaatst.

length
Int32

De maximale lengte die moet worden gekopieerd naar de buffer.

Retouren

Het werkelijke aantal tekens dat wordt gelezen.

Uitzonderingen

De doorgegeven index lag buiten het bereik van 0 tot FieldCount - 1.

Er is een poging gedaan om gegevens op te halen uit een verwijderde rij.

Er is geprobeerd een kolom in een gesloten DataTableReaderkolom te lezen of te openen.

De opgegeven kolom bevat geen tekenmatrix.

Voorbeelden

In het volgende voorbeeld ziet u de GetChars methode. De TestGetChars methode verwacht een gevulde kolom met twee gegevenskolommen door te geven DataTableReader : een bestandsnaam in de eerste kolom en een matrix met tekens in de tweede. Daarnaast TestGetChars kunt u de buffergrootte opgeven die moet worden gebruikt terwijl de gegevens uit de tekenmatrix in de DataTableReadermatrix worden gelezen. TestGetChars maakt een bestand dat overeenkomt met elke rij met gegevens in de DataTableReader, met behulp van de opgegeven gegevens in de eerste kolom van de DataTableReader bestandsnaam.

In deze procedure wordt het gebruik gedemonstreerd van de GetChars methode voor het lezen van gegevens die zijn opgeslagen in de DataTable tekenmatrix. Elk ander type gegevens zorgt ervoor dat de GetChars methode een 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

Opmerkingen

GetChars retourneert het aantal beschikbare tekens in het veld. Meestal is dit de exacte lengte van het veld. Het geretourneerde getal kan echter kleiner zijn dan de werkelijke lengte van het veld als GetChars het al is gebruikt om tekens uit het veld te verkrijgen.

Het werkelijke aantal tekens dat wordt gelezen, kan kleiner zijn dan de aangevraagde lengte als het einde van het veld is bereikt. Als u een buffer doorgeeft die null is (Nothing in Visual Basic), retourneert GetChars de lengte van het hele veld in tekens, niet de resterende grootte op basis van de parameter bufferverschil.

Er worden geen conversies uitgevoerd; daarom moeten de gegevens die moeten worden opgehaald, al een tekenmatrix of coercible zijn voor een tekenmatrix.

Van toepassing op