Сохранение больших двоичных данных в базе данных sql с помощью С#

Мне нужен код для хранения (в конечном итоге больших) файлов в БД с использованием С#.

Решение, которое я использую, похоже на: (я использую столбец varbinary(MAX) в БД)

1) Создать SqlCommand

2) Создать Sql-параметр

3) Установить параметр.Значение = File.ReadAllBytes(filePath)

4) Выполнить SqlCommand

Есть ли более эффективное решение? Поскольку файл может быть большим, я боюсь проблем с производительностью при чтении всех байтов в память и последующем сохранении их в БД.

заранее спасибо


person Miroslav Kaděra    schedule 17.01.2011    source источник
comment
Это не точная копия, но очень похожа на stackoverflow.com/questions/8952/ Этот вопрос задавался здесь по-разному, и консенсус всегда заключается в том, что хранение файлов в базе данных - плохая идея. В конце концов, производительность почти всегда будет проблемой.   -  person David    schedule 17.01.2011
comment
@David - Большие файлы. См. этот технический документ: research.microsoft.com/apps/pubs/?id=64525   -  person Oded    schedule 17.01.2011
comment
Спасибо за ссылку, @Oded. Читаю сейчас.   -  person David    schedule 17.01.2011
comment
@Oded - опять же, позвольте мне сказать .. ХОРОШАЯ статья. Спасибо! Я люблю этот сайт! Я всегда узнаю что-то новое.   -  person David    schedule 17.01.2011
comment
@David: Тип FILESTREAM в SQL Server также является, по крайней мере, частичным решением проблемы, связанной с хранением больших двоичных объектов в базе данных.   -  person Adam Robinson    schedule 17.01.2011
comment
@David Спасибо за ваш комментарий, хранение данных в БД - это факт, который я должен уважать. Вопрос был направлен на решение C # (это был вопрос кодирования C #, а не вопрос дизайна приложения) - есть ли способ передать данные из файла в базу данных SQL, кроме ReadBytes (==> загрузить в память) --› Параметр --› Command --› DB... Например можно ли файл стримить в DB или что-то в этом роде.   -  person Miroslav Kaděra    schedule 17.01.2011


Ответы (2)


То, что у вас есть, — это лучшее, что вы можете получить с помощью столбца varbinary(MAX). Хотя вы можете передавать данные из из базы данных, вы не можете передавать их во внутрь.

person Adam Robinson    schedule 17.01.2011

Я столкнулся с той же проблемой прямо сейчас. Существует способ последовательной записи в поля varbinary. См. эту статью: «Загрузка и отправка изображений с SQL Server через ASP.NET MVC» http://www.codeproject.com/KB/aspnet/streamingblobhttp.aspx

Он показывает способ использования такой команды, как:

UPDATE <table> SET <field>.WRITE(@data, null, null) WHERE ...

Это позволяет записывать фрагменты данных в ваш столбец без необходимости чтения всего файла.

person Le Fab    schedule 06.01.2012