none
Запись файла в поле varbinary(max) RRS feed

  • Вопрос

  • Когда начинал реализовывать сохранение файлов в базе (база на MS SQL Server 2008) предполагал, что проблем не возникнет....

    но почитав на различных форумах, что поэтому поводу пишут люди - оказывается есть куча проблем c записью файлов в базу...

    1) Передача файла в ХП-шку как аргумента:

    Я это предпологал сделать так:

    // ....
    
    command.Parameters.Add(new SqlParameter("@file", SqlDBType.Varbinary));
    
    command.Parameters["@file"].Value = SqlBytes(buffer);
    
    //... buffer - массив байтов куда записан сам запостеный файл... 
    


    Нормальный ли это способ для передачи файлов в ХП-шку? - ато прочитал, что вроде как этот способ не надежен - большие файлы могут уйти не полностью (у меня предполагается работа с файлами порядка 10 Мбайт).

     

    2) Что касается самой ХП-шки:

    Вроде как делать просто Insert в varbinary(max) очень не желательно..., а нужно использовать для записи в это поле updatetext, но нормальных примеров

    работы с ним не нашел...

    • Перемещено Siddharth Chavan 2 октября 2010 г. 0:18 MSDN Forums Consolidation (От:SQL Server для разработчиков)
    1 апреля 2010 г. 13:12

Ответы

  • 1) Не сталкивался за несколько лет использования такого подхода ни с какими проблемами. Файлы бывают и поболее 10 мегабайт.

    2) Просто insert в varbinary(max) работает у меня превосходно. UPDATETEXT - устаревшая конструкция. Пользоваться ей не надо. Заменяет её .WRITE в UPDATE, но для простой вставки это всё совершенно не нужно.

    • Помечено в качестве ответа A.G.Sedov 1 апреля 2010 г. 15:23
    1 апреля 2010 г. 14:54
  • Попробуйте использовать FILESTREAM - http://msdn.microsoft.com/ru-ru/library/bb933993.aspx, совмещает в себе преимущества потоковой работы с файлами и ссылочную целостность базы данных. На файлах размером более 2-х мегабайт получите прирост в производительности (по сравнению с хранением в базе).

    • Помечено в качестве ответа I.Vorontsov 2 апреля 2010 г. 5:57
    1 апреля 2010 г. 17:30

Все ответы

  • Посмотрите, может пригодится: http://t-sql.ru/post/CompressFileCLR.aspx


    http://www.t-sql.ru
    1 апреля 2010 г. 14:47
    Модератор
  • 1) Не сталкивался за несколько лет использования такого подхода ни с какими проблемами. Файлы бывают и поболее 10 мегабайт.

    2) Просто insert в varbinary(max) работает у меня превосходно. UPDATETEXT - устаревшая конструкция. Пользоваться ей не надо. Заменяет её .WRITE в UPDATE, но для простой вставки это всё совершенно не нужно.

    • Помечено в качестве ответа A.G.Sedov 1 апреля 2010 г. 15:23
    1 апреля 2010 г. 14:54
  • Попробуйте использовать FILESTREAM - http://msdn.microsoft.com/ru-ru/library/bb933993.aspx, совмещает в себе преимущества потоковой работы с файлами и ссылочную целостность базы данных. На файлах размером более 2-х мегабайт получите прирост в производительности (по сравнению с хранением в базе).

    • Помечено в качестве ответа I.Vorontsov 2 апреля 2010 г. 5:57
    1 апреля 2010 г. 17:30