0 out of 1 rated this helpful Rate this topic

SqlDataReader.GetBytes Method

Reads a stream of bytes from the specified column offset into the buffer an array starting at the given buffer offset.

Namespace:  System.Data.SqlClient
Assembly:  System.Data (in System.Data.dll)
public override long GetBytes(
	int i,
	long dataIndex,
	byte[] buffer,
	int bufferIndex,
	int length
)

Parameters

i
Type: System.Int32
The zero-based column ordinal.
dataIndex
Type: System.Int64
The index within the field from which to begin the read operation.
buffer
Type: System.Byte()
The buffer into which to read the stream of bytes.
bufferIndex
Type: System.Int32
The index within the buffer where the write operation is to start.
length
Type: System.Int32
The maximum length to copy into the buffer.

Return Value

Type: System.Int64
The actual number of bytes read.

Implements

IDataRecord.GetBytes(Int32, Int64, Byte(), Int32, Int32)
IDataRecord.GetBytes(Int32, Int64, Byte(), Int32, Int32)

GetBytes returns the number of available bytes in the field. Most of the time this is the exact length of the field. However, the number returned may be less than the true length of the field if GetBytes has already been used to obtain bytes from the field. This may be the case, for example, if the SqlDataReader is reading a large data structure into a buffer. For more information, see the SequentialAccess setting for CommandBehavior.

If you pass a buffer that is Nothing, GetBytes returns the length of the entire field in bytes, not the remaining size based on the buffer offset parameter.

No conversions are performed; therefore, the data retrieved must already be a byte array.

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Easier to use GetSqlBytes or GetSqlBinary
It is a lot easier and more concise to use SqlDataReader.GetSqlBytes or SqlDataReader.GetSqlBinary
For instance,
 SqlBytes v2;
byte[] ts;
               if (!sdr.IsDBNull(sdr.GetOrdinal("timestamp_column")))                 {                     v2 = sdr.GetSqlBytes(sdr.GetOrdinal("timestamp_column"));                     ts = v2.Value;                     Console.WriteLine("bit_timestamp contains {0}"Convert.ToBase64String(ts));                 }                 else                 {                     Console.WriteLine("bit_timestamp contains null");                 }

Using IDataReader to read 'image' sql data type to byte array (VB.NET)
Dim ndx As Integer = rdr.GetOrdinal(columnName)

If (Not rdr.IsDBNull(ndx)) Then
    Dim size As Long = rdr.GetBytes(ndx, 0, Nothing, 0, 0) ' get the length of data
    Dim values As Byte() = New Byte(size - 1) {}

    Dim bufferSize As Integer = 1024
    Dim bytesRead As Long = 0
    Dim curPos As Integer = 0

    While (bytesRead < size)
        If (size - bytesRead < bufferSize) Then
            bufferSize = size - bytesRead
        End If

        bytesRead += myReader.GetBytes(ndx, curPos, values, curPos, bufferSize)
        curPos += bufferSize
    End While

    Return values
End If
Using IDataReader to read 'image' sql data type to byte array
            ind ndx = rdr.GetOrdinal("<ColumnName>");
            if(!rdr.IsDBNull(ndx))
           {
            long size = rdr.GetBytes(ndx, 0, null, 0, 0);  //get the length of data
            byte[] values = new byte[size];

            int bufferSize = 1024;
            long bytesRead = 0;
            int curPos = 0;

            while (bytesRead < size)
            {
                bytesRead += rdr.GetBytes(ndx, curPos, values, curPos, bufferSize);
                curPos += bufferSize;
            }
           }