DataTableReader.GetChars(Int32, Int64, Char[], Int32, Int32) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 DataTableReader
olanak tanır. TestGetChars
, dosyasının ilk sütunundaki sağlanan verileri dosya adı olarak kullanarak içindeki DataTableReader
her 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 InvalidCastException
oluş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.