OracleLob.Read(Byte[], Int32, Int32) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 OracleLob 스트림에서 바이트의 시퀀스를 읽은 다음 읽은 바이트 수만큼 스트림 내에서 위치를 앞으로 이동합니다.
public:
override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer
매개 변수
- buffer
- Byte[]
바이트 배열입니다. 이 메서드는 지정된 바이트 배열의 값이 offset
과 (offset
+ count
) 사이에서 현재 원본으로부터 읽어온 바이트로 교체된 상태로 반환됩니다.
- offset
- Int32
현재 스트림에서 읽은 데이터를 저장하기 시작하는 buffer
의 바이트 오프셋(0부터 시작)입니다.
CLOB
및 NCLOB
데이터 형식의 경우 짝수여야 합니다.
- count
- Int32
현재 스트림에서 읽을 최대 바이트 수입니다.
CLOB
및 NCLOB
데이터 형식의 경우 짝수여야 합니다.
반환
버퍼로 읽어온 총 바이트 수입니다. 이 바이트 수는 현재 바이트가 충분하지 않은 경우 요청된 바이트 수보다 작을 수 있으며 스트림의 끝에 도달하면 0이 됩니다.
예외
buffer
가 null 참조(Visual Basic에서는 Nothing
)인 경우
offset
또는 count
매개 변수의 값이 양수가 아닌 경우
또는
오프셋과 카운트 매개 변수의 합계가 버퍼 길이보다 큰 경우
또는
amount
또는 offset
매개 변수에 지정된 값이 0보다 작거나 4GB보다 큰 경우
작업이 트랜잭션에 속하지 않거나, OracleLob 개체가 null이거나, 연결이 닫힌 경우
개체가 닫혔거나 삭제된 경우
Oracle 오류가 발생한 경우
설명
메서드는 Read 현재 스트림에서 최대 count
바이트를 읽고 부터 offset
에 저장합니다buffer
. 스트림 내의 현재 위치는 읽은 바이트 수만큼 고급입니다. 그러나 예외가 발생하면 스트림 내의 현재 위치는 변경되지 않습니다.
Read 는 읽은 바이트 수를 반환합니다. 반환 값은 현재 위치가 스트림의 끝에 있는 경우에만 0입니다.
Read는 데이터를 사용할 수 없는 경우 하나 이상의 데이터를 읽을 수 있을 때까지 차단됩니다.Read 는 현재 위치가 의 끝에 LOB
있을 때 에서 LOB
읽으려고 하면 0을 반환합니다.
Read 는 스트림의 끝에 도달하지 않은 경우에도 요청된 것보다 적은 바이트를 반환할 수 있습니다.
.NET Framework Data Provider for Oracle은 모든 CLOB
데이터와 NCLOB
데이터를 유니코드로 처리합니다. 따라서 및 NCLOB
데이터 형식에 CLOB
액세스할 때 항상 각 문자가 2바이트인 바이트 수를 처리합니다. 예를 들어 문자 집합이 문자당 4바이트인 Oracle 서버에 3자가 포함된 텍스트 문자열을 로 저장 NCLOB
하고 작업을 수행하는 Read
경우 문자열 길이를 6바이트로 지정합니다. 단, 문자열은 서버에 12바이트로 저장됩니다.
다음 예제에서는 개체를 읽 OracleLob 는 방법을 보여 줍니다.
public static void ReadLobExample(OracleCommand command)
{
int actual = 0;
// Select some data.
// Table Schema:
// "CREATE TABLE TableWithLobs (a int, b BLOB, c CLOB, d NCLOB)";
// "INSERT INTO TableWithLobs values (1, 'AA', 'AAA', N'AAAA')";
command.CommandText = "SELECT * FROM TableWithLobs";
OracleDataReader reader = command.ExecuteReader();
using(reader)
{
// Obtain the first row of data.
reader.Read();
// Obtain the LOBs (all 3 varieties).
OracleLob BLOB = reader.GetOracleLob(1);
OracleLob CLOB = reader.GetOracleLob(2);
OracleLob NCLOB = reader.GetOracleLob(3);
// Example - Reading binary data (in chunks).
var buffer = new byte[100];
while((actual = BLOB.Read(buffer, 0, buffer.Length)) > 0)
Console.WriteLine(BLOB.LobType + ".Read(" + buffer + ", " + buffer.Length + ") => " + actual);
// Example - Reading CLOB/NCLOB data (in chunks).
// Note: You can read character data as raw Unicode bytes (using OracleLob.Read as in the above example).
// However, because the OracleLob object inherits directly from the.NET stream object,
// all the existing classes that manipulate streams can also be used. For example, the
// .NET StreamReader makes converting the raw bytes into actual characters easier.
var streamreader = new StreamReader(CLOB, Encoding.Unicode);
var cbuffer = new char[100];
while((actual = streamreader.Read(cbuffer, 0, cbuffer.Length)) >0)
Console.WriteLine(CLOB.LobType + ".Read(" + new string(cbuffer, 0, actual) + ", " + cbuffer.Length + ") => " + actual);
//Example - Reading data (all at once).
//You could use StreamReader.ReadToEnd to obtain all the string data,or simply
//call OracleLob.Value to obtain a contiguous allocation of all the data.
Console.WriteLine(NCLOB.LobType + ".Value => " + NCLOB.Value);
}
}
다음 형식을 사용하여 NULL인 을 OracleLob 생성할 수 있습니다.
OracleLob myLob = OracleLob.Null;
이 기술은 다음 예제와 같이 서버에서 반환된 가 LOB
NULL인지 여부를 테스트하는 데 주로 사용됩니다.
if (myLob == OracleLob.Null)
NULL LOB
은 성공하고 항상 0바이트를 LOB
반환하는 Read 의 0바이트와 유사하게 동작합니다.
적용 대상
.NET