DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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);
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 Ordnungszahl der Spalte.
- dataIndex
- Int64
Der Index im Feld, an dem der Lesevorgang beginnen soll.
- buffer
- Char[]
Der Puffer, in den der Zeichenstream gelesen werden soll.
- bufferIndex
- Int32
Der Index innerhalb des Puffers, an dem mit dem Platzieren der Daten begonnen werden soll.
- length
- Int32
Die maximale Länge, die in den Puffer kopiert werden soll.
Gibt zurück
Die tatsächlich gelesene Anzahl von Zeichen.
Ausnahmen
Der übergebene Index lag 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 einem geschlossenen DataTableReader
zu lesen oder darauf zuzugreifen.
Die angegebene Spalte enthält kein Zeichenarray.
Beispiele
Das folgende Beispiel veranschaulicht die GetChars
Methode. Die TestGetChars
-Methode erwartet, dass ein DataTableReader
mit zwei Datenspalten gefülltes übergeben wird: einen Dateinamen in der ersten Spalte und ein Array von Zeichen in der zweiten Spalte. Darüber hinaus können Sie die Puffergröße angeben, die verwendet werden soll, TestGetChars
wenn die Daten aus dem Zeichenarray in gelesen DataTableReader
werden. TestGetChars
erstellt eine Datei, die den einzelnen Datenzeilen in der DataTableReader
entspricht, wobei die angegebenen Daten in der ersten Spalte des DataTableReader
als Dateiname angegeben werden.
Diese Prozedur veranschaulicht die Verwendung der Methode zum GetChars
Lesen von Daten, die DataTable
als Zeichenarray gespeichert wurden. Jeder andere Datentyp bewirkt, dass die GetChars
-Methode ein InvalidCastException
auslöst.
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), GetChars
gibt die Länge des gesamten Felds in Zeichen zurück, nicht die verbleibende Größe basierend auf dem Pufferoffsetparameter.
Es werden keine Konvertierungen durchgeführt. Daher müssen die abzurufenden Daten bereits ein Zeichenarray oder ein Zeichenarray sein.