Существует ли класс SqlFileStream, который работает с Sql Server 2005?

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

SqlFileStream предоставляет IoStream, который находится поверх значения blob ( varbinary ), которое хранится в базе данных. Однако из-за ограничений на реализацию SqlFileStream он будет работать только с Sql Server 2008.

Логически я не вижу причин, по которым некоторые API не могут быть предоставлены на Sql Server 2000 и Sql Server 2005.

  • Кто-нибудь знает, было ли это сделано?
  • Есть ли реализация этого источника с открытым исходным кодом?
  • Что мне не хватает, думая, что это должно быть возможно?

Я не знаю о классе SqlFileStream для чего-либо, кроме SQL Server 2008. Я подозреваю, что это полностью связано с тем, что класс SqlFileStream специально разработан для «сидения поверх» столбца типа FILESTREAM в SQL Server 2008.

Столбец / тип данных FILESTREAM доступен только в SQL Server 2008 и по существу позволяет хранить большие объемы данных в этом столбце. Столбец FILESTREAM самом деле является столбцом varbinary(max) с модификатором FILESTREAM . Это существенно заставляет SQL Server эффективно обходить подсистему хранения RDBMS и хранить двоичные данные непосредственно в базовой файловой системе NTFS, поддерживая целостность транзакций для этих данных с точки зрения РСУБД.

В статье MSDN это так:

Указание атрибута FILESTREAM в столбце varbinary (max) заставляет SQL Server хранить данные в локальной файловой системе NTFS, а не в файле базы данных. Операторы Transact-SQL предоставляют возможности управления данными на сервере, а интерфейсы файловой системы Win32 обеспечивают потоковый доступ к данным.

Данные FILESTREAM в статье MSDN SQL Server 2008 также указывают, что:

API SqlFileStream работает в контексте транзакции SQL Server.

Но также и то, что:

SqlFileStream наследует класс System.IO.Stream, который предоставляет методы для чтения и записи потоков данных. Чтение из потока передает данные из потока в структуру данных, например массив байтов. Запись переносит данные из структуры данных в поток.

Предполагая, что внутри SqlFileStream работает так же, как и стандартный класс FileStream «болотный стандарт»

Однако, возможно, наиболее подробные сведения о том, почему эта функциональность недоступна в предыдущих версиях SQL Server (которые не реализуют тип типа FILESTREAM или типа direct-to-under-storage), относятся к статье FILESTREAM Overview MSDN который гласит:

FILESTREAM объединяет SQL Server Database Engine с файловой системой NTFS, сохраняя данные двоичного большого двоичного файла (BLOB) в формате varbinary (max) в виде файлов в файловой системе. Операторы Transact-SQL могут вставлять, обновлять, запрашивать, искать и создавать резервные копии данных FILESTREAM. Интерфейсы файловой системы Win32 обеспечивают потоковый доступ к данным.

FILESTREAM использует системный кеш NT для кэширования данных файла. Это помогает уменьшить любое влияние, которое могут иметь данные FILESTREAM на производительность Database Engine. Пул буферов SQL Server не используется; поэтому эта память доступна для обработки запросов.

По существу, это говорит о том, что использование объекта SqlFileStream будет действовать почти идентично «стандартным» объектам FileStream, за исключением того, что SQL Server (для целей целостности транзакций) будет действовать как очень легкий «гейткипер» (или «обертка») для чтения и записи двоичные данные в файл файловой системы NTFS. Поскольку ни одна предыдущая версия SQL Server не предложила такую ​​функциональность и не прямую интеграцию с базовой файловой системой NTFS, я бы сказал, что реализовать SqlFileStream для любой версии SQL не удастся Server до SQL Server 2008. (По крайней мере, не тот, который имеет одинаковые «записи в файл, но поддерживает функции транзакционной целостности RDBMS»).

Тип данных FILESTREAM был введен в SQL Server 2008, и в SQL Server 2005 нет эквивалента. Этот тип данных обрабатывается иначе, чем обычный тип blob. Данные FILESTREAM хранятся отдельно в базе данных в виде файлов, а капли (текст или varchar (макс.) И одинаковые) хранятся непосредственно на страницах данных. Таким образом, вы можете передавать содержимое файлов с помощью SqlFileStream в SQL 2008, но для чтения блобов, db-движок должен загружать их в память сервера и возвращать клиенту в целом. Из-за этого невозможно иметь что-либо вроде SqlFileStream, прикрепленного непосредственно к столбцу blob в SQL 2005.

см. Как я сериализую большой граф объекта .NET в BLOB SQL Server без создания большого буфера ?

  • Метод SqlDataAdapter.FillSchema () не работает
  • определить переменные соединения для сервера sql
  • Создание пользователей SQL и ограничение их разрешений
  • Системные данные SqlClient SqlException
  • Не удается найти решение для запроса вставки и конфликта внешнего ключа. ADO.NET C #
  • Параметр In-Out для SqlCommand
  • Что происходит, когда вызывается SqlCommand.Dispose?
  • Отключение sp_reset_connection
  • Что быстрее для множественных вызовов SQL - параметризованные запросы или хранимые процедуры?
  • Как найти параметры в sql-запросе с помощью C # Ado.Net
  • Не удалось преобразовать значение параметра из TimeSpan в DateTime
  • Interesting Posts

    рассчитать оплату в соответствии с количеством детей

    Нужна помощь в выборе диапазона дат запроса SQL из таблицы периодов квартала

    Функция LAG в таблице Alter производит ошибку оконной функции

    Как назначить текущую дату конкретному времени для столбца?

    Как установить значение по умолчанию для столбца с помощью alter в SQL Server?

    MDX – получение уровня членов, используемых в настоящее время в разделе where

    Странная вещь – это данные внутри SQL Server Management Studio

    Отличный счет за две таблицы. SQL

    Как уникально идентифицировать строки в таблице без первичного ключа

    Unicode Insert не работает в EF6 Migration

    Как найти все данные из трех разных таблиц в SQL?

    Создание запроса на вставку (ошибка ограничения внешнего ключа)

    Как включить новые строки из syscomments в SQL Server?

    запрос для отображения данных строки как столбца

    Несколько потоков для оптимальной производительности

    Давайте будем гением компьютера.