получить поток в и из столбца VarBinary (MAX)? (SQL Server) - PullRequest
3 голосов
/ 28 августа 2010

У меня есть некоторые данные, которые я сериализую. Мне нужно сохранить и восстановить это из столбца VarBinary, используя ADO.NET (также используя Enterprise Library) в .Net 3.5 (пока не 4.0).

Единственный интерфейс, который я могу найти и получить, - это использование байта []. Для этого необходимо выделить большой массив для передачи.

Кажется невозможным, что ADO.NET не поддерживает потоки для этих столбцов. Или я что-то пропускаю?

Спасибо

1 Ответ

5 голосов
/ 26 ноября 2010

Я искал тот же ответ. Я нашел статью в EggHeadCafe, которая предлагает решение, использующее такую ​​команду для чтения:
SELECT substring(DataColumn, @offset, @length) FROM BlobTable WHERE ID = @key

И такая команда для записи:
UPDATE BlobTable SET DataColumn.write(@buffer, @offset, @length) WHERE ID = @key

Полное решение (с пользовательским классом потока) можно найти здесь: http://www.eggheadcafe.com/software/aspnet/29988841/how-to-readwrite-chunked-to-varbinarymax-in-c.aspx.

Для моих целей, однако, я собираюсь использовать тип данных FileStream, который доступен с Sql Server 2008. После того, как вы вставите запись (без двоичных данных), Sql Server выделяет физический файл на диске для чтения и записи данных записи. Затем вы запускаете команду, чтобы получить путь:
SELECT DataColumn.PathName() FROM BloblTable WHERE [Id] = @key

Получив это, вы можете читать и записывать в файл, используя традиционный потоковый класс, такой как System.IO.FileStream.

Существуют значительные накладные расходы, но FileStream становится быстрее, когда файлы становятся больше (около 10 МБ). Для небольших файлов столбец FileStream можно рассматривать как столбец varbinary с гораздо меньшими накладными расходами. Эта статья в CodeProject объясняет детали: http://www.codeproject.com/KB/database/SqlFileStream.aspx

...