Как Передать данные потоком из полей SQL Server BLOB?

Для предпосылок к этому вопросу см., “Как я сериализирую большой график объекта.NET в SQL Server BLOB, не создавая большой буфер?” это теперь имеет большую щедрость на нем.

Я хочу смочь использовать Потоковый объект для данных чтения-записи к/от полю BLOB в строке SQL Server, не имея необходимость помещать все данные во временный буфер.


Если вышеупомянутое может быть сделано...

Поскольку Потоковый класс имеет партию CanXXX() методы, не все потоки могут использоваться всеми методами, берут, принимают потоковые исходные данные/выводы.

Таким образом, насколько способный поток должен быть должен работать с ADO.NET при отправке данных в SQL Server?


Я надеюсь иметь стандартный Поток, к которому я могу передать его на другие API.

Также два ответа до сих пор только касаются получения формы данных SqlServer, не отправляя данные SqlServer.

7
задан Community 23 May 2017 в 11:53
поделиться

2 ответа

Вот пример для чтения данных в кусках:

    using (var conn = new SqlConnection(connectionString))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "select somebinary from mytable where id = 1";
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                byte[] buffer = new byte[1024]; // Read chunks of 1KB
                long bytesRead = 0;
                long dataIndex = 0;
                while ((bytesRead = reader.GetBytes(0, dataIndex, buffer, 0, buffer.Length)) > 0)
                {
                    byte[] actual = new byte[bytesRead];
                    Array.Copy(buffer, 0, actual, 0, bytesRead);
                    // TODO: Do something here with the actual variable, 
                    // for example write it to a stream
                    dataIndex += bytesRead;
                }
            }

        }
    }
5
ответ дан 7 December 2019 в 10:02
поделиться

Вы не ставите все данные в буфер; Как правило, вы, как правило, выпускаете петлю, буферизующую несколько множественным из 8040 байтов (связанных с размером страницы), добавляя BLOB каждый раз Writetext / ReptateText для Image , или update.write для varbinary (max) . Вот старший пример (использует изображение , извините).

Аналогично, при чтении данных вы, надеюсь, будут перекачивать данные в небольшом буфере в какой-то другой пункт назначения (ответ HTTP, сеть, файл и т. Д.). Что-то , как это (хотя я не совсем так, как он обрабатывает его eof / chanking; я бы проверил + ve bytes читать).

1
ответ дан 7 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: