Хранение файлов Crystal Reports в базе данных?

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

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

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

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


person Lawrence Johnston    schedule 08.10.2008    source источник


Ответы (4)


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

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

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

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

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

person Scott Saad    schedule 09.10.2008

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

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

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

person Booji Boy    schedule 09.10.2008

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

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

person runxc1 Bret Ferrier    schedule 23.10.2008

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

person Farrukh shahzad    schedule 12.03.2015