Retrieve varbinary(MAX) from SQL Server to byte[] in C#

26,588

Solution 1

private static byte[] getDocument(int documentId)
{
    using (SqlConnection cn = new SqlConnection("..."))
    using (SqlCommand cm = cn.CreateCommand())
    {
        cm.CommandText = @"
            SELECT DocumentData
            FROM   Document
            WHERE  DocumentId = @Id";
        cm.Parameters.AddWithValue("@Id", documentId);
        cn.Open();
        return cm.ExecuteScalar() as byte[];
    }
}

Solution 2

You have to SELECT DATALENGTH(data) and data

where data is your varbinary(max)

int i=0;
long dataLen = dr.GetInt64(i++);
if (dataLen > 0)
{
    Data = new byte[dataLen];
    dr.GetBytes(i++, 0, Data, 0, (int)dataLen);
}
Share:
26,588

Related videos on Youtube

ePezhman
Author by

ePezhman

Updated on February 15, 2020

Comments

  • ePezhman
    ePezhman over 4 years

    I'm trying to get a varbinary(MAX) from SQL Server to a byte[] variable in C#.

    How can I do this?

    Thanks

  • Ian
    Ian about 7 years
    Execute scalar returns a max of 2033 characters (msdn.microsoft.com/en-us/library/…). So this wouldn't work if your data was longer than 2033 bytes right?