Поделиться через


Использование хранилища 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.

Пример

Образцы FILESTREAM можно найти на веб-узле CodePlex в разделе Образцы кода и проекты сообщества Microsoft SQL Server.