クライアント アプリケーションでの 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 の ReadFileWriteFileTransmitFileSetFilePointerSetEndOfFile、または FlushFileBuffers にハンドルを渡すことができます。このハンドルを使用してその他の API を呼び出すと、ERROR_ACCESS_DENIED エラーが返されます。ハンドルは、CloseHandle を使用して閉じる必要があります。

FILESTREAM データ コンテナーへのアクセスは、すべて SQL Server のトランザクションで実行されます。同じトランザクションで Transact-SQL ステートメントを実行すると、SQL データと FILESTREAM データの一貫性を維持できます。