私は同じ答えを探していました。EggHeadCafe で、読み取りに次のようなコマンドを使用して解決策を提供する記事を見つけました。
SELECT substring(DataColumn, @offset, @length) FROM BlobTable WHERE ID = @key
そして、書き込み用の次のようなコマンド:
UPDATE BlobTable SET DataColumn.write(@buffer, @offset, @length) WHERE ID = @key
ここで完全なソリューション (カスタム ストリーム クラスを使用) を見つけることができます: http://www.eggheadcafe.com/software/aspnet/29988841/how-to-readwrite-chunked-to-varbinarymax-in-c.aspx。
ただし、私の目的のために、現在利用可能な FileStream データ型を利用するつもりだと思いますSql Server 2008。レコード (sans バイナリ データ) を挿入すると、Sql Server は、レコード データの読み取りと書き込みのために、ディスク上に物理ファイルを割り当てます。次に、コマンドを実行してパス名を取得します。
SELECT DataColumn.PathName() FROM BloblTable WHERE [Id] = @key
それができたら、従来のストリーム クラス ( System.IO.FileStream.
オーバーヘッドはかなりありますが、FileStream はファイルが大きくなるにつれて (約 10MB) 高速になります。ファイルが小さい場合は、FileStream 列を varbinary 列として扱い、オーバーヘッドを大幅に削減できます。CodeProject のこの記事では、詳細について説明しています: http://www.codeproject.com/KB/database/SqlFileStream.aspx