Partager via


DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) Méthode

Définition

Retourne la valeur de la colonne spécifiée sous la forme d'un tableau de caractères.

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);
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

Paramètres

ordinal
Int32

Numéro de colonne de base zéro.

dataIndex
Int64

L’index figurant dans le champ à partir duquel l’opération de lecture doit être lancée.

buffer
Char[]

Mémoire tampon dans laquelle lire le flux de caractères.

bufferIndex
Int32

Index de la mémoire tampon à partir duquel commencer à placer les données.

length
Int32

Longueur maximale à copier dans la mémoire tampon.

Retours

Nombre réel de caractères lus.

Exceptions

L'index passé était en dehors de la plage comprise entre 0 et FieldCount - 1.

Une tentative a été effectuée pour récupérer des données à partir d'une ligne supprimée.

Une tentative a été effectuée pour lire une colonne ou y accéder dans un DataTableReader fermé.

La colonne spécifiée ne contient pas de tableau de caractères.

Exemples

L’exemple suivant illustre la GetChars méthode. La TestGetChars méthode s’attend à recevoir un DataTableReader rempli avec deux colonnes de données : un nom de fichier dans la première colonne et un tableau de caractères dans la deuxième. En outre, TestGetChars vous permet de spécifier la taille de la mémoire tampon à utiliser lors de la lecture des données du tableau de caractères dans le DataTableReader. TestGetChars crée un fichier correspondant à chaque ligne de données dans , DataTableReaderen utilisant les données fournies dans la première colonne du comme nom de DataTableReader fichier.

Cette procédure illustre l’utilisation de la GetChars méthode de lecture des données stockées dans le sous forme DataTable de tableau de caractères. Tout autre type de données entraîne la GetChars levée d’un 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

Remarques

GetChars retourne le nombre de caractères disponibles dans le champ. La plupart du temps, il s’agit de la longueur exacte du champ. Toutefois, le nombre retourné peut être inférieur à la longueur réelle du champ si GetChars a déjà été utilisé pour obtenir des caractères à partir du champ.

Le nombre réel de caractères lus peut être inférieur à la longueur demandée, si la fin du champ est atteinte. Si vous passez une mémoire tampon null (Nothing en Visual Basic), GetChars retourne la longueur du champ entier en caractères, et non la taille restante en fonction du paramètre de décalage de la mémoire tampon.

Aucune conversion n’est effectuée ; Par conséquent, les données à récupérer doivent déjà être un tableau de caractères ou être contraintes à un tableau de caractères.

S’applique à