在客户端应用程序中使用 FILESTREAM 存储

使用 FILESTREAM 来存储二进制大型对象 (BLOB) 数据时,可使用 Win32 API 来处理文件。为了支持在 Win32 应用程序中处理 FILESTREAM BLOB 数据,SQL Server 提供了以下函数和 API:

  • PathName 可将路径作为标记返回给 BLOB。应用程序可使用此标记来获取 Win32 句柄并对 BLOB 数据进行操作。

  • GET_FILESTREAM_TRANSACTION_CONTEXT() 可返回表示会话当前事务的标记。应用程序使用此标记可将 FILESTREAM 文件系统流式处理操作绑定到该事务。

  • OpenSqlFilestream API 可获取 Win32 文件句柄。应用程序使用此句柄可对 FILESTREAM 数据进行流式处理,然后可以将此句柄传递给以下 Win32 API:ReadFileWriteFileTransmitFileSetFilePointerSetEndOfFileFlushFileBuffers。如果应用程序使用此句柄来调用任何其他 API,则会返回 ERROR_ACCESS_DENIED 错误。应用程序应使用 CloseHandle 来关闭此句柄。

所有 FILESTREAM 数据容器访问都是在 SQL Server 事务中执行的。可在同一事务中执行 Transact-SQL 语句以保持 SQL 数据和 FILESTREAM 数据之间的一致性。