Export (0) Print
Expand All

DataTableReader.GetBytes Method

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

Namespace:  System.Data
Assembly:  System.Data (in System.Data.dll)

public override long GetBytes(
	int ordinal,
	long dataIndex,
	byte[] buffer,
	int bufferIndex,
	int length
)

Parameters

ordinal
Type: System.Int32

The zero-based column ordinal.

dataIndex
Type: System.Int64

The index within the field from which to start 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 at which to start placing the data.

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)

ExceptionCondition
ArgumentOutOfRangeException

The index passed was outside the range of 0 to FieldCount - 1.

DeletedRowInaccessibleException

An attempt was made to retrieve data from a deleted row.

InvalidOperationException

An attempt was made to read or access a column in a closed DataTableReader.

InvalidCastException

The specified column does not contain a byte array.

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, when the DataTableReader is reading a large data structure into a buffer

If you pass a buffer that is null (Nothing in Visual Basic), 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 or coercible to a byte array.

The following example creates a DataTableReader based on data in the AdventureWorks sample database, and saves each image retrieved to a separate file in the C:\ folder. In order to test this application, create a new Console application, reference the System.Drawing.dll assembly, and paste the sample code into the newly created file.

using System;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

class Class1
{
    [STAThread]
    static void Main(string[] args)
    {
        TestGetBytes();
    }

    static private void TestGetBytes()
    {
        // Set up the data adapter, using information from  
        // the AdventureWorks sample database.
        SqlDataAdapter photoAdapter = SetupDataAdapter( 
            "SELECT ThumbnailPhotoFileName, ThumbNailPhoto " +
            "FROM Production.ProductPhoto");
        // Fill the DataTable.
        DataTable photoDataTable = new DataTable();
        photoAdapter.Fill(photoDataTable);

        using (DataTableReader reader = new DataTableReader(photoDataTable))
        {
            while (reader.Read())
            {
                String productName = null;
                try
                {
                    // Get the name of the file.
                    productName = reader.GetString(0);
                    // Get the length of the field. Pass null 
                    // in the buffer parameter to retrieve the length 
                    // of the data field. Ensure that the field isn't 
                    // null before continuing. 
                    if (reader.IsDBNull(1))
                    {
                        Console.WriteLine(productName + " is unavailable.");
                    }
                    else
                    {
                        long len = reader.GetBytes(1, 0, null, 0, 0);
                        // Create a buffer to hold the bytes, and then 
                        // read the bytes from the DataTableReader.
                        Byte[] buffer = new Byte[len];
                        reader.GetBytes(1, 0, buffer, 0, (int)len);
                        // Create a new Bitmap object, passing the array  
                        // of bytes to the constructor of a MemoryStream. 
                        using (Bitmap productImage = new 
                                   Bitmap(new MemoryStream(buffer)))
                        {
                            String fileName = "C:\\" + productName;
                            // Save in gif format.
                            productImage.Save(fileName, ImageFormat.Gif);
                            Console.WriteLine("Successfully created " + fileName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(productName + ": " + ex.Message);
                }
            }
        }
        Console.WriteLine("Press Enter to finish.");
        Console.ReadLine();
    }

    static private SqlDataAdapter SetupDataAdapter(String sqlString)
    {
        // Assuming all the default settings, create a SqlDataAdapter 
        // working with the AdventureWorks sample database that's  
        // available with SQL Server.
        String connectionString = 
            "Data Source=(local);Initial Catalog=AdventureWorks;" +
            "Integrated Security=true";
        return new SqlDataAdapter(sqlString, connectionString);
    }
}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft