![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
Здравствуйте.
Есть такая задача: хранить документы (.pdf, .doс, .html возможно и другие) в базе данных. По запросу пользователя давать возможность скачать выбранный файл. База данных MS SQL Подскажите как можно реализовать такую возможность. --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Завести поле с типом varbinary(MAX) и работать с таблицей через датасет. В датасете такое поле будет массивом байтов.
-------------------- ![]() |
|||
|
||||
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
Допустим пользователь указал путь к некоторуму файлу, как заполнить это поле в датасет? Сериализовать? Как код должен примерно выглядеть? --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Открываем файл, считываем в массив, добавляем DataRow в датасет, пихаем в поле row-а считанный массив, сохраняем датасет датаадаптером в БД. Файл читать можно через FileStream, датасет подойдёт обычный (нетипизированный), либо автосгенерированный с таблицы базы данных, адаптер юзаем SqlDataAdapter.
-------------------- ![]() |
|||
|
||||
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
Спасибо, mr.DUDA! Вроде получается.
Только вот создать поле типа varbinary(MAX) в таблице БД не удалось. Ругается MS SQL. Сделал просто varbinary. В связи с этим вопрос: смогу ли сохранять файлы произвольного размера? --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Похоже на то, что MAX появилось только в 2005-м SQL Server. Если юзать varbinary без MAX, максимальный размер данных будет 8000 байт. В 2000-м надо использовать один из типов полей: text, ntext или image.
-------------------- ![]() |
|||
|
||||
albert21 |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
Использую тип поля Image, при вставке новой записи компьютер сильно задумывается при чём на долго затем появляется окошко с сообщением "Error askid thread to die!", в конце концов генерится исключение "Query timeout expired". Самое интересное то, что запись всё таки вставляется в полном объёме, т.е. прочитав данные из поля можно восстановить файл. Как быть с тормозами и вышеупомянутыми сообщениями? Подскажите!
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Выставить в connection string-е тайм-аут побольше (см. http://www.connectionstrings.com), юзать не OleDbConnection etc. а SqlConnection и SqlCommand etc.
-------------------- ![]() |
|||
|
||||
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
На сколько больше? Можно о тайм-ауте подробнее, за что он отвечает, зачем нужен, как работает? Добавлено @ 21:05 Как связан тайм-аут и размер файла? --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Соединение имеет тайм-аут, зависящий от дефолтных настроек БД и строки соединения. По истечении времени тайм-аута, соединение разрывается. Если операция вставки записи в БД занимает больше времени, чем по дефолту отводит провайдер MS SQL, то даже при нормальном исходе соединение будет оборвано. Количество секунд на тайм-аут можно прописать в настройках базы или в строке соединения, для MS SQL нужно указать ";Connection Timeout=количество_секунд". Возможно проблему можно решить, используя не OLE DB provider, а managed provider для MS SQL, имеющий бОльшую производительность - это классы пространства имён System.Data.SqlClient; если операция вставки большой записи будет производиться быстрее, то и выхода за тайм-аут не будет. З.Ы. а насколько большие файлы сохраняются в поле Image ? 100 килобайт ? 10 мегабайт ? -------------------- ![]() |
|||
|
||||
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
В базе данных должны хранится электронные документы (главным образом книги) различных форматов. PDF книжки могут быть весьма увесистым! ![]() --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
Есть ли файл-серверы, под которые можно было бы написать своего клиента на C#?
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
А чем не катит просто файлы сохранять на сервере ? Тот же файл-сервер получается. Только имя надо генерить для файла так, чтобы не пересеклось с другими. -------------------- ![]() |
|||
|
||||
albert21 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
Возможно прийдётся реализовывать версионность документов. Просто файлы слишком громоздко, путанно! Хотя тоже вариант.
Я слышал о SharePoint Portal Server, у этой проги API иметтся для доступа к возможностям. mr.DUDA, никогда не работал с ней? --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
SharePoint имхо лучше не трогать, это вообще отдельная тема, скорее CMS чем файловый сервер, и гемора с установкой и настройкой масса.
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |