Domanda

Ho un front-end UI che parla e manipola un database di SQL Server e una delle cose che può fare è eseguire report sui dati nel database.

Questa UI può essere installata su più computer e finora ho appena tenuto i rapporti in una cartella con l'installazione, ma ciò significa che ogni volta che viene aggiunto un nuovo rapporto deve essere copiato manualmente in ogni singolo Interfaccia utente installata là fuori.

Stavo pensando di archiviare i file .rpt nel database stesso (As Blobs) e di avere un meccanismo per l'interfaccia utente per recuperarli quando necessario come un modo per centralizzare i report ed eliminare questo problema.

Qualcuno ha provato questo e ha funzionato bene? O se non lo hai fatto, puoi pensare a qualcosa che dovrei prendere in considerazione prima di andare avanti con questo? Sono suggerimenti, trucchi o avvertimenti che potresti pensare che potrebbero essermi utili?

È stato utile?

Soluzione

Ottima domanda! È un po 'una coincidenza in quanto lo abbiamo appena implementato negli ultimi sei mesi.

Come hai suggerito, memorizziamo il file rpt nel database, ma lo facciamo in Server 2005 come tipo di immagine. Funziona bene e per quanto riguarda il database, non ci sono davvero avvertimenti che vengono in mente.

Ovviamente, il modo in cui accedi a queste informazioni cambia con l'API. Se stai usando C #, questo si traduce nell'uso di un BinaryReader per caricare il file rpt, afferrando un array di byte . Questo array di byte può quindi essere passato al database, tramite una procedura memorizzata, ecc.

Mi rendo conto che stai chiedendo in modo specifico BLOB e Server 2008, ma funziona sia su Server 2005 che su Server 2008 . Spero che questo faccia luce.

Se hai bisogno di dettagli più specifici sarei felice di condividere!

Altri suggerimenti

Ecco un ottimo podcast con Paul Randal (ha scritto parti di DBCC!) in cui parlano della nuova funzione filestream in SQL Server 2008 per la gestione dei BLOB, ma vanno anche nelle dimensioni dei file che funzionano e non funzionano bene come chiazze come parte del discorso. Penso che ti sarebbe di aiuto. http://www.runasradio.com/default.aspx?showNum=74

Ho appena scoperto che il white paper FILESTREAM di 25 pagine che Paul ha scritto è stato pubblicato su MSDN. http://msdn.microsoft.com/en-us/library/cc949109. aspx .

Sulla base della ricerca citata più avanti in questo white paper, i BLOB di dimensioni inferiori a 256 kilobyte (KB) (come le icone dei widget) sono meglio archiviati all'interno di un database e i BLOB di dimensioni superiori a 1 megabyte (MB) sono meglio archiviati fuori dal database. Per quelli con dimensioni comprese tra 256 KB e 1 MB, la soluzione di archiviazione più efficiente dipende dal rapporto lettura / scrittura dei dati e dalla velocità di & # 8220; sovrascrittura & # 8221 ;. La memorizzazione dei dati BLOB esclusivamente all'interno del database (ad es. Utilizzando il tipo di dati varbinary (max)) è limitata a 2 gigabyte (GB) per BLOB.

Bene, ora tutti noi possiamo facilmente archiviare un BLOB in un SERVER SQL, ORACLE, SQLITE, MYSQL Server e qualsiasi altro database che valga la pena. Quello che mi chiedo è dopo aver estratto l'array di byte dal DB come hai creato il rapporto?

Voglio fare la stessa cosa ma l'unica cosa a cui riesco a pensare è estrarre il file dal DB, creare un file fisico in una cartella Temp e quindi utilizzare l'indirizzo fisico del nuovo file per creare il cristallo Rapporto. Esiste un modo per creare un report Crystal da un flusso di memoria o una matrice di byte?

Il file .RPT può essere archiviato nel database (sql) facendolo digitare come immagine. Memorizza l'array di byte nel database e poi lo recupera come flusso. (SUGGERIMENTO: trattalo come file immagine.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top