Я использовал эти ресурсы:
http://lennilobel.wordpress.com/2011/01/23/sql-server-2008-filestream-part-3-of-3-using-the-opensqlfilestream-api-2/ <- более или менее точный код dotnet для копирования. </p>
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/03/filestream-configuration-and-setup-changes-in-sql-server-2008-february-ctp.aspx <- настройка файлового потока в sqlserver, упоминает об ошибке и ссылается на решение </p>
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/06/09/enabling-filestream-post-sql2008-setup-a-known-issue-in-sql-config-manager.aspx <- решение проблемы, скрипт для запуска </p>
http://sqlsrvengine.codeplex.com/wikipage?title=FileStreamEnable&referringTitle=Home&ProjectName=sqlsrvengine <- скрипт </p>
(http://www.mssqltips.com/tip.asp?tip=1489 // Слишком стар, имеет неправильные имена)
, чтобы помочь мне.
Я обменялся функциональностью, чтобы передать данные прямо в веб-браузер(или чтение в ОЗУ) для сохранения его в файл с этим кодом:
private static void CopyFile(string sourcePath, byte[] transToken, string targetPath, Guid uid)
{
// Should we use a buffer here? I mean - does this firehose use memory according to the file size? If so - use a buffer and copy piece by piece.
SafeFileHandle handle = NativeSqlClient.GetSqlFilestreamHandle(sourcePath, NativeSqlClient.DesiredAccess.Read, transToken);
using (var fileSource = new FileStream(handle, FileAccess.Read))
{
using (var fileDest = new FileStream(Path.Combine(targetPath, uid.ToString()), FileMode.CreateNew, FileAccess.Write))
{
fileSource.CopyTo(fileDest);
fileDest.Flush();
fileDest.Close();
}
fileSource.Close();
}
}
Если вы используете код с сайта LLobel выше, вы узнаете, куда вставить вызов этого метода.
Также обратите внимание, что нельзя изменить порядок полей с помощью drag'n'drop в SQLServermanagementstudio;атрибут filestream в поле удаляется.