DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) Yöntem

Tanım

Belirtilen sütunun değerini karakter dizisi olarak döndürür.

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

Parametreler

ordinal
Int32

Sıfır tabanlı sütun sıralı.

dataIndex
Int64

Okuma işleminin başlatıldığı alan içindeki dizin.

buffer
Char[]

Karakter akışının okunduğu arabellek.

bufferIndex
Int32

Verilerin yerleştirildiği arabellek içindeki dizin.

length
Int32

Arabelleğe kopyalanacak maksimum uzunluk.

Döndürülenler

Okunan gerçek karakter sayısı.

Özel durumlar

Geçirilen dizin 0 FieldCount - 1 aralığının dışındaydı.

Silinen bir satırdan veri alma girişiminde bulunuldu.

Kapalı bir içindeki bir sütunu okuma veya sütuna erişme girişiminde bulunuldu DataTableReader.

Belirtilen sütun bir karakter dizisi içermiyor.

Örnekler

Aşağıdaki örnekte yöntemi gösterilmektedir GetChars . yöntemi, TestGetChars iki veri sütunuyla doldurulmuş olarak DataTableReader geçirilmeyi bekler: ilk sütunda bir dosya adı ve ikinci sütunda bir karakter dizisi. Ayrıca, TestGetChars içindeki karakter dizisindeki verileri okurken kullanılacak arabellek boyutunu belirtmenize DataTableReaderolanak tanır. TestGetChars , dosyasının ilk sütunundaki sağlanan verileri dosya adı olarak kullanarak içindeki DataTableReaderher veri satırına DataTableReader karşılık gelen bir dosya oluşturur.

Bu yordam, içinde bir karakter dizisi olarak depolanan verileri okuma yönteminin DataTable kullanımını GetChars gösterir. Diğer veri türleri, yönteminin GetChars bir InvalidCastExceptionoluşturmasına neden olur.

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

Açıklamalar

GetChars alandaki kullanılabilir karakterlerin sayısını döndürür. Çoğu zaman bu, alanın tam uzunluğudur. Ancak, alandan karakterleri almak için zaten kullanılmışsa GetChars , döndürülen sayı alanın gerçek uzunluğundan küçük olabilir.

Alanın sonuna ulaşılırsa, okunan gerçek karakter sayısı istenen uzunluktan az olabilir. Null (Nothing Visual Basic'te) olan bir arabelleğe geçirirseniz, GetChars arabellek uzaklığı parametresine göre kalan boyutu değil, tüm alanın uzunluğunu karakterlerle döndürür.

Hiçbir dönüştürme gerçekleştirilmiyor; bu nedenle, alınacak verilerin zaten bir karakter dizisi olması veya bir karakter dizisine zorlanabilmesi gerekir.

Şunlara uygulanır