Usando armazenamento FILESTREAM em aplicativos cliente

Quando FILESTREAM é usado para armazenar dados BLOB (objeto binário grande), é possível usar APIs do Win32 para trabalhar com os arquivos. Para oferecer suporte ao trabalho com dados BLOB do FILESTREAM em aplicativos Win32, o SQL Server fornece as seguintes funções e API:

  • PathName retorna um caminho como um token para um BLOB. Um aplicativo usa esse token para obter um identificador do Win32 e operar em dados BLOB.

  • GET_FILESTREAM_TRANSACTION_CONTEXT() retorna um token que representa a transação atual de uma sessão. Um aplicativo usa esse token para associar operações de fluxo contínuo do sistema de arquivos do FILESTREAM à transação.

  • A API OpenSqlFilestream obtém um identificador de arquivo Win32. O aplicativo usa o identificador para transmitir os dados do FILESTREAM e, em seguida, pode passar o identificador para as seguintes APIs do Win32: ReadFile, WriteFile, TransmitFile, SetFilePointer, SetEndOfFile ou FlushFileBuffers. Se o aplicativo chamar qualquer outra API usando o identificador, um erro ERROR_ACCESS_DENIED será retornado. O aplicativo deve fechar o identificador usando CloseHandle.

Todo acesso ao contêiner de dados FILESTREAM é executado em uma transação do SQL Server. As instruções do Transact-SQL podem ser executadas na mesma transação para manter a consistência entre dados do SQL e do FILESTREAM.