Какой самый эффективный способ чтения многих байтов из SQL Server с использованием SqlDataReader (C #) - PullRequest
0 голосов
/ 20 мая 2010

Какой самый эффективный способ чтения байтов (8-16 K) из SQL Server с использованием SqlDataReader.Кажется, я знаю 2 способа:

byte[] buffer = new byte[4096];
MemoryStream stream = new MemoryStream();
long l, dataOffset = 0;
while ((l = reader.GetBytes(columnIndex, dataOffset, buffer, 0, buffer.Length)) > 0)
{
    stream.Write(buffer, 0, buffer.Length);
    dataOffset += l;
}

и

reader.GetSqlBinary(columnIndex).Value

Тип данных: IMAGE

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Для этого размера блоба я бы пошел с GetSqlBinary. Ниже я также включил пример кодирования Base64; как то так:

using (SqlConnection con = new SqlConnection("...")) {
    con.Open();
    using (SqlCommand cmd = con.CreateCommand()) {
        cmd.CommandText = "SELECT TOP 1 * FROM product WHERE DATALENGTH(picture)>0";
        using (SqlDataReader reader = cmd.ExecuteReader()) {
            reader.Read();

            byte[] dataBinary = reader.GetSqlBinary(reader.GetOrdinal("picture")).Value;
            string dataBase64 = System.Convert.ToBase64String(dataBinary, Base64FormattingOptions.InsertLineBreaks);

            //TODO: use dataBase64 
        }
    }
}
0 голосов
/ 20 мая 2010

GetSqlBinary загрузит все данные в память, в то время как ваш первый подход будет читать их порциями, что займет меньше памяти, особенно если вам нужно обрабатывать двоичный файл только по частям. Но опять же, это зависит от того, что вы собираетесь делать с двоичным файлом и как он будет обрабатываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...