Вопрос

У меня есть интерфейс пользовательского интерфейса, который взаимодействует с базой данных SQL Server и манипулирует ею, и одна из вещей, которые он может делать, - это запускать отчеты по данным в базе данных.

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

Я думал о сохранении файлов .rpt в самой базе данных (в виде больших двоичных объектов) и наличии некоторого механизма для пользовательского интерфейса для их извлечения при необходимости, чтобы централизовать отчеты и устранить эту проблему.

Кто-нибудь пробовал это, и хорошо ли это сработало?Или, если вы этого не сделали, можете ли вы придумать что-нибудь, что я должен принять во внимание, прежде чем двигаться дальше с этим?Есть ли какие-нибудь советы, хитрости или предостережения, которые, по вашему мнению, могли бы быть полезны мне?

Это было полезно?

Решение

Отличный Вопрос!Это своего рода совпадение, поскольку на самом деле мы внедрили это только за последние шесть месяцев.

Как вы предложили, мы храним файл rpt в базе данных, но делаем это на сервере 2005 как тип изображения.Это работает просто отлично, и что касается базы данных, то на самом деле никаких предостережений, которые приходят на ум, нет.

Очевидно, что способ доступа к этой информации меняется в зависимости от API.Если вы используете C #, это означает использование Двоичный файл для чтения чтобы загрузить в rpt-файл, взяв массив байтов.Это массив байтов затем может быть передан в базу данных через хранимую процедуру и т.д.

Я понимаю, что вы спрашиваете конкретно о больших двоичных объектах и сервере 2008, но это работает как на Сервере 2005, так и на Сервере 2008.Надеюсь, это прольет немного света.

Если вам нужны более конкретные подробности, я был бы рад поделиться!

Другие советы

Вот отличный подкаст с Полом Рэндалом (он написал части для DBCC!), где они рассказывают о новой функции файлового потока в SQL Server 2008 для обработки больших двоичных объектов, но они также касаются размеров файлов, которые работают и работают не очень хорошо. как капли как часть разговора. Я думаю, что это поможет вам. http://www.runasradio.com/default.aspx?showNum=74

Я только что узнал, что 25-страничный документ FILESTREAM, который написал Пол, был опубликован на MSDN. http://msdn.microsoft.com/en-us/library/cc949109. ASPX .

На основании исследования, процитированного ниже в этом техническом документе, большие двоичные объекты размером менее 256 килобайт (КБ) (например, значки виджетов) лучше хранить в базе данных, а лучшие двоичные объекты размером более 1 мегабайта (МБ) лучше хранить. вне базы данных. Для тех, кто имеет размер от 256 КБ до 1 МБ, более эффективное решение для хранения данных зависит от соотношения чтения и записи данных и скорости & # 8220; перезаписи & # 8221 ;. Хранение данных BLOB исключительно в базе данных (например, с использованием типа данных varbinary (max)) ограничено 2 гигабайтами (ГБ) на BLOB.

Хорошо, теперь мы все можем легко хранить большой двоичный объект в SQL-сервере, ORACLE, SQLITE, MYSQL-сервере и любой другой базе данных, которая стоит чего угодно. Что мне интересно, так это после того, как вы получили байтовый массив из БД, как вы создали отчет?

Я хочу сделать то же самое, но единственное, о чем я могу думать, это извлечь файл из БД, создать физический файл в папке Temp и затем использовать физический адрес нового файла для создания кристалла. Отчет. Есть ли способ создать Crystal Report из потока памяти или байтового массива?

.RPT-файл можно сохранить в базе данных (sql), указав его тип image.Store байтовый массив в базу данных, а затем извлечь его как поток. (СОВЕТ: Обрабатывать его как файл изображения.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top