Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Документ MS Office (Word или Excel) в БД, как оптимальнее хранить? 
:(
    Опции темы
Roo
  Дата 17.1.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



Как оптимальнее хранить документ MS Office (Word или Excel) в БД? Т.е. чтобы он не был доступен на диске в виде файла, а напрямую хранился в БД? Как это реализовать? Не могу ничего по этому поводу в MSDN найти.
PM MAIL   Вверх
arilou
Дата 17.1.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Юзай тип поля image в SQL Server'е. В нем могут храниться любые бинарные данные.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Roo
Дата 17.1.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



Спасибо, arilou! Правда, не могу докопаться до того, как это реализовать (т.е. как документ вёрда записать побайтово в БД и вообще хранить в байтовом виде)..
PM MAIL   Вверх
arilou
Дата 18.1.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Roo
Он и так уже в бинарном виде. Просто читаешь его в байтовый массив и пишешь в поле через parametrized query (UPDATE MyWordFileTable SET WordDocument = ?, где ? - параметр запроса, передаваемый через SqlCommand.Parameters).


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Roo
Дата 18.1.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



"Просто читаешь его в байтовый массив"
с этим проблема... как Document в byte[] переписать? подробных описаний вёрдовских методов нигде не встречал...
PM MAIL   Вверх
mr.DUDA
Дата 19.1.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(Roo @ 18.1.2006, 19:55)
"Просто читаешь его в байтовый массив"
с этим проблема... как Document в byte[] переписать? подробных описаний вёрдовских методов нигде не встречал...

Выложил пример, как это делается с пом. clipboard:

http://forum.vingrad.ru/index.php?showtopi...st&p=621325


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 19.1.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(Roo @ 18.1.2006, 20:55 Найти цитируемый пост)

как Document в byte[] переписать?

С файлами работать умеешь?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Roo
Дата 19.1.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



Цитата(arilou @ 19.1.2006, 11:53)
С файлами работать умеешь?

Умеем-с, только с вёрдом не ахти как
PM MAIL   Вверх
arilou
Дата 19.1.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(Roo @ 19.1.2006, 13:18 Найти цитируемый пост)

Умеем-с

Открываешь файл, считываешь в byte[] и кладешь в БД. В чем именно сложность?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 19.1.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Roo, посмотри ссылку которую я дал, там всё написано.


--------------------
user posted image
PM MAIL WWW   Вверх
RedButterfly
Дата 2.9.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Учусь
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 4.7.2005
Где: Уфа->Москва

Репутация: нет
Всего: нет



Цитата(arilou @ 19.1.2006,  15:12)
Цитата(Roo @  19.1.2006,  13:18 Найти цитируемый пост)

Умеем-с

Открываешь файл, считываешь в byte[] и кладешь в БД. В чем именно сложность?

сложность в том как преобразовать документ в объект...
 smile 
PM MAIL ICQ Skype   Вверх
arilou
Дата 3.9.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



RedButterfly, для чего?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Wanderer2019
Дата 3.9.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 1
Всего: 17



Цитата(RedButterfly @  2.9.2008,  15:09 Найти цитируемый пост)
сложность в том как преобразовать документ в объект...

Тебе и не нужен объект ворда. Читаешь файл как любой другой - произвольного типа.

Что то типа вот - 
Код

FileStream fs=System.IO.File.Open("file.doc", FileMode.Open);
            byte[] file_bytes = new byte[fs.Length];
            fs.Read(file_bytes, 0, file_bytes.Length);


После чего в file_bytes у тебя и есть этот док файл в виде массива байт.

PM ICQ MSN   Вверх
RedButterfly
Дата 3.9.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Учусь
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 4.7.2005
Где: Уфа->Москва

Репутация: нет
Всего: нет



Цитата(arilou @ 3.9.2008,  11:46)
RedButterfly, для чего?

Чтобы он хранился в виде поля image в базе данных.
Чтобы как Вордовский документ нигде не существовал.
Чтобы залить его в базу и вытаскивать оттуда.

PM MAIL ICQ Skype   Вверх
Idsa
Дата 3.9.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(RedButterfly @  3.9.2008,  16:59 Найти цитируемый пост)
Чтобы он хранился в виде поля image в базе данных.

Image - устаревший тип. Рекомендуется использовать varchar(max).

Цитата(RedButterfly @  3.9.2008,  16:59 Найти цитируемый пост)
Чтобы залить его в базу и вытаскивать оттуда.

Весьма спорное решение. Все-таки DBA сходятся в том, что blob-данные лучше хранить на жестком диске, а в базе хранить только указатель на них.
Я сам недавно столкнулся дилеммой "хранить blob-данные в базе или нет". Провел тестирование под MS SQL Server 2005. Пришел к выводу, что на производительность запросов (тех, которые не задействуют сами blob-данные) хранение blob-данных в базе не влияет (насколько я помню, эти данные просто хранятся в отдельной области в базе данных, поэтому их присутствие не сказывается на производительности). Однако есть еще пара нюансов. Например, уже так просто не откроешь в Management Studio (или в любом другом клиенте) табличку (а в процессе разработки это очень удобно): открытие таблицы, которая весит гигабайт (это так, для начала smile ) занимает гораздо больше времени, чем хотелось бы. Кроме того, скачивание файлов из базы имеет ряд тонкостей:
1. Скачивать файл на клиент полностью нельзя, т. к. передача на клиент, например, 2 гигабайт данных просто убьет среднестатистическую тачку (OutOfMemoryException). Нужно использовать последовательное считывание и обработку (например, запись на жесткий диск на клиенте). Пример такого считывания я уже как-то приводил.
2. Если считывать большие файлы из базы, очень долго будет открыт connection к базе. Насколько я могу судить, connection к базе - гораздо более серьезный ресурс, нежели connection к серверу (при традиционном хранении файлов). Кроме того, если я не ошибаюсь, на некоторые СУБД есть лицензии, которые ограничивают количество одновременных соединений.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.