Использование хранилища FILESTREAM в клиентских приложениях

Если для хранения данных больших двоичных объектов (BLOB) используется FILESTREAM, то для работы с файлами могут быть использованы API-интерфейсы Win32. Для поддержки работы с данными FILESTREAM BLOB в приложениях Win32 в SQL Server предусмотрены следующие функции и API-интерфейсы.

  • PathName возвращает в BLOB путь в виде токена. Этот токен позволяет приложению получить дескриптор Win32 и работать с данными большого двоичного объекта.

  • GET_FILESTREAM_TRANSACTION_CONTEXT() возвращает токен, представляющий текущую транзакцию сеанса. Данный токен позволяет приложению связать потоковые операции файловой системы FILESTREAM с транзакцией.

  • OpenSqlFilestream API получает дескриптор файла Win32. Данный дескриптор позволяет приложению передать поток данных FILESTREAM, после чего приложение передает этот дескриптор следующим API-интерфейсам Win32: ReadFile, WriteFile, TransmitFile, SetFilePointer, SetEndOfFile или FlushFileBuffers. Если при помощи этого дескриптора приложение вызывает любой другой API-интерфейс, возвращается ошибка ERROR_ACCESS_DENIED. Приложение должно закрыть дескриптор с помощью функции CloseHandle.

Любой доступ к контейнеру данных FILESTREAM осуществляется в транзакции SQL Server. В этой же транзакции могут быть выполнены инструкции Transact-SQL, обеспечивающие согласованность данных SQL и данных FILESTREAM.