![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Roo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Как оптимальнее хранить документ MS Office (Word или Excel) в БД? Т.е. чтобы он не был доступен на диске в виде файла, а напрямую хранился в БД? Как это реализовать? Не могу ничего по этому поводу в MSDN найти.
|
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 4 Всего: 61 |
Юзай тип поля image в SQL Server'е. В нем могут храниться любые бинарные данные.
|
|||
|
||||
Roo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Спасибо, arilou! Правда, не могу докопаться до того, как это реализовать (т.е. как документ вёрда записать побайтово в БД и вообще хранить в байтовом виде)..
|
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 4 Всего: 61 |
Roo
Он и так уже в бинарном виде. Просто читаешь его в байтовый массив и пишешь в поле через parametrized query (UPDATE MyWordFileTable SET WordDocument = ?, где ? - параметр запроса, передаваемый через SqlCommand.Parameters). |
|||
|
||||
Roo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
"Просто читаешь его в байтовый массив"
с этим проблема... как Document в byte[] переписать? подробных описаний вёрдовских методов нигде не встречал... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Выложил пример, как это делается с пом. clipboard: http://forum.vingrad.ru/index.php?showtopi...st&p=621325 -------------------- ![]() |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 4 Всего: 61 |
||||
|
||||
Roo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Умеем-с, только с вёрдом не ахти как |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 4 Всего: 61 |
Открываешь файл, считываешь в byte[] и кладешь в БД. В чем именно сложность? |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Roo, посмотри ссылку которую я дал, там всё написано.
-------------------- ![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
||||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 4 Всего: 61 |
RedButterfly, для чего?
|
|||
|
||||
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 1 Всего: 17 |
Тебе и не нужен объект ворда. Читаешь файл как любой другой - произвольного типа. Что то типа вот -
После чего в file_bytes у тебя и есть этот док файл в виде массива байт. |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
Чтобы он хранился в виде поля image в базе данных. Чтобы как Вордовский документ нигде не существовал. Чтобы залить его в базу и вытаскивать оттуда. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Image - устаревший тип. Рекомендуется использовать varchar(max). Весьма спорное решение. Все-таки DBA сходятся в том, что blob-данные лучше хранить на жестком диске, а в базе хранить только указатель на них. Я сам недавно столкнулся дилеммой "хранить blob-данные в базе или нет". Провел тестирование под MS SQL Server 2005. Пришел к выводу, что на производительность запросов (тех, которые не задействуют сами blob-данные) хранение blob-данных в базе не влияет (насколько я помню, эти данные просто хранятся в отдельной области в базе данных, поэтому их присутствие не сказывается на производительности). Однако есть еще пара нюансов. Например, уже так просто не откроешь в Management Studio (или в любом другом клиенте) табличку (а в процессе разработки это очень удобно): открытие таблицы, которая весит гигабайт (это так, для начала ![]() 1. Скачивать файл на клиент полностью нельзя, т. к. передача на клиент, например, 2 гигабайт данных просто убьет среднестатистическую тачку (OutOfMemoryException). Нужно использовать последовательное считывание и обработку (например, запись на жесткий диск на клиенте). Пример такого считывания я уже как-то приводил. 2. Если считывать большие файлы из базы, очень долго будет открыт connection к базе. Насколько я могу судить, connection к базе - гораздо более серьезный ресурс, нежели connection к серверу (при традиционном хранении файлов). Кроме того, если я не ошибаюсь, на некоторые СУБД есть лицензии, которые ограничивают количество одновременных соединений. |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
очень интересные замечания ![]() Дело в том, что я до конца не могу определиться как лучше всего сделать прогу, а именно: в программе есть TreeView, кликая на ветки которого, пользователи, сидящие в разных местах (будет распределенное приложение) будут открывать эти файлы - документы Word (для начала) будут создавать, изменять, удалять, перемещать по дереву и т.д. пишу под vs2005 + sqlserver2005 файлы большие, тяжелые и с разнообразным содержимым кучу файлов потом надо будет сливать в один (соединить документы ворд) и такой файл будет весить метров 200-300-400...естественно его тоже будут смотреть...))) Руководство желает, чтобы вся информация хранилась в базе данных. Мне же кажется удобным и безопасным (кто знает что может стать с этой БД) хранение и в БД и в защищенном месте в виде файлов. С удовольствием выслушаю советы ![]() |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Хранение и там, и там - пустая трата ресурсов. Нужно определиться с местом хранения и периодически делать бекапы. Я сейчас заканчиваю проект с очень похожей структурой. У меня файлы хранятся в файловой системе, причем каталоги воссоздают то самое дерево. Гемороя, конечно, больше, нежели с хранением файлов в базе, но мне религия не позволяет захламлять базу большими файлами. |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
интересный проект делаете
![]() на будущее посоветуйте пожалуйста литературу по распределенным приложениям ![]() скоро выложу что у меня получилось на этом этапе ![]() |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
||||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Хранение данных используя нереляционные хранилища тоже чреваты некими сложностями. Например:
1. Доступ к файлам учетных записей домена. 2. Отсутствие резервного копирования. поясню: 1. Столкнулся когда писал приложение, в БД хранились пути к файлам, пользователь указывает что хотел бы просмотреть этот документ, а его не пускает туда, как оказалось такова политика отдела безопасности. А пользователь видит еще те файлы которые ему видеть не надо, его туда даже не пустит. Еще почему то когда учетной был дан доступ, фреймверк переодически стрелял с ошибкой доступа, получался доступ к файлу через раз. 2. Здесь преимущества тоже за БД, у нее есть хорошее свойство как backup/restore, вслучаи чего можно восстановить, если же полетит хард у сервера (что не редкость), то восттановить сложновато. Но все же это вопрос на который нет однозначного ответа. У нас маленькие файлы хранятся в БД. Большие хранятся на сервере в файловой системе. файловая система дублируется, 3 сервера, все 3 в разных городах, в случае чего, восстановить можно и файлы. -------------------- ![]() |
|||
|
||||
RedButterfly |
|
||||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
расшифровала ![]() WCF-Windows Communication Foundation так? Добавлено через 3 минуты и 37 секунд
сервер один..и он без зеркал... можете дать примеры книг/статей/прочего для написания приложения работающего по сети? ![]() |
||||
|
|||||
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 1 Всего: 17 |
||||
|
||||
RedButterfly |
|
||||||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
нуу) он завсинет же).... но пользователи верят, что смогут терпеливо открывать такие файлы... )) пока вот что у меня получилось Это открытие файла и копирование его в другое место.
Этот метод делает из файла байты:
а так из байтов документ ворд получается...
Я вот думаю, нужно ли эти документы сериализовать? |
||||||
|
|||||||
MasterOfCode |
|
||||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Так на вскидочку.
Если файл будет 400 Мб, эта строка вызовет зависание программы.
fileStream.Close(); не выполнится, т.к. процедура прекратит работать строчкой выше. -------------------- ![]() |
||||
|
|||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
учла
![]() |
|||
|
||||
RedButterfly |
|
||||||||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
что-то я не пойму :(
если вот так добавить значение в базу данных - оно добавляется из TextBox: я думаю, что тут написано криво, но работает....
а вот так не добавляет:
где
вот тут
выскакивает такое окошечко Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
||||||||
|
|||||||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Так попробуй. -------------------- ![]() |
|||
|
||||
RedButterfly |
|
||||||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
не помогло :( выскакивают уже два окошкас одинаковой ошибкой, в которых говорится,что поле ожидает, что в него положат значение...и не дожидается...как я поняла.... на это
Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
||||||
|
|||||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Внимательней:
не insertCommand.Parameters.Add("@Context",SqlDbType.Image, Context.Length); а, insertCommand.Parameters.Add("@Context",SqlDbType.Image, Context.Length).Value = Context; -------------------- ![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
Урра добавляет)))
вот:
![]() однако ошибка все-равно выскакивает... сейчас буду разбираться... я почему-то думаю, что ругается вот так потому что программа (датагридвью) не может показать эти данные... Это сообщение отредактировал(а) RedButterfly - 5.9.2008, 09:41 Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
RedButterfly |
|
||||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
догадки оказались верными
![]() итак: добавление документа Ворд (Эксель думаю наподобие будет) выглядит так:
|
||||
|
|||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
Делаю считывание из базы данных в документ Word
![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
Странно однако.
Взяла пример считывания BLOB-поля из базы данных из MSDN. Вставила в свой код ![]() и не работает.
может у кого есть работающие примеры? раз в MSDN немного не так написано... Добавлено через 6 минут и 7 секунд Пишет вот такую ошибку: Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
вот так тоже не считывает
и пишет ошибки
пример взят отсюда ссылка я уже не знаю :( где же искать информацию если не в MSDN и не на сайтах, посвященных программированию? |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
byte[] dataCon = new byte[bytesize]; - Исправь!
bytesread += dataReader.GetBytes(0, curpos, dataCon, (int)curpos, chunkSize); - тут тоже! Вы пробовали сами пытаться исправлять свои синтаксические ошибки? ![]()
Если пример взяли и он не работает, 99,99% в том что он не работает - это вина ваша, а не тех кто опубликовал. -------------------- ![]() |
|||
|
||||
RedButterfly |
|
||||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
спасибо ![]() вы правы. скоро выложу что получилось на данном этапе...вдруг кому понадобится... |
||||
|
|||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
:(
Люди! Люди! Писала я писала значит....и тут объяснили таки , что писать нужно с использованием ООП... ООП это хорошо конечно. Но неужели так важно? Итого: три класса (никак не связанных с винформс) должны работать с формой... что-то потерялась я... неужели эту прогу нужно именно с использованием ООП писать? |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Что вы понимаете под ООП? -------------------- ![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
||||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Так и есть, реализовывать желательно все через классы. Это дает несравнимые преимущества с обычным программированием в лоб.
-------------------- ![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
тоже самое сказали... ![]() ... может уже тогда опаздавший вопрос задам: что и где прочитать по ООП + С#? простите конечно за навязчивость... |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
-------------------- ![]() |
|||
|
||||
RedButterfly |
|
|||
Учусь ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 4.7.2005 Где: Уфа->Москва Репутация: нет Всего: нет |
спасибо))
я скоро ... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |