Guida di SSRS 2005 - è necessario ottenere le dimensioni del file da TSQL (percorso specificato nella colonna). Chiunque?
-
03-07-2019 - |
Domanda
Devo ottenere la dimensione della cartella e visualizzare le informazioni su un rapporto (SSRS). Devo farlo per un certo numero di database (loop!). Questi DB sono backend dei siti Web. Qualcuno l'ha già fatto? Potete per favore indicarmi alcuni campioni o la giusta direzione? Xp_filesize e simili sono la soluzione giusta? Aiuto!
Soluzione
Guardando la domanda e la risposta di Tomalak, e presumo che il server di report sarà in grado di raggiungere le cartelle contenute nel DB:
Innanzitutto imposta la query per ripristinare il set di risultati dei percorsi - suppongo che non avrai problemi con questa parte. Successivamente dovrai aggiungere una funzione di codice personalizzato al rapporto: http: / /msdn.microsoft.com/en-us/library/ms155798.aspx - Questa funzione prenderà il percorso della cartella come parametro e ridurrà le dimensioni della cartella. Dovrai scrivere in VB.Net se vuoi incorporare il codice nel rapporto, oppure potresti codificare una DLL e inserirlo.
Un esempio di blocco di codice VB.Net (ricorda che potrebbe essere necessario aggiungere un prefisso agli oggetti con System.IO.) http://www.freevbcode.com/ShowCode.asp?ID=4287
Public Shared Function GetFolderSize(ByVal DirPath As String, _
Optional IncludeSubFolders as Boolean = True) As Long
Dim lngDirSize As Long
Dim objFileInfo As FileInfo
Dim objDir As DirectoryInfo = New DirectoryInfo(DirPath)
Dim objSubFolder As DirectoryInfo
Try
'add length of each file
For Each objFileInfo In objDir.GetFiles()
lngDirSize += objFileInfo.Length
Next
'call recursively to get sub folders
'if you don't want this set optional
'parameter to false
If IncludeSubFolders then
For Each objSubFolder In objDir.GetDirectories()
lngDirSize += GetFolderSize(objSubFolder.FullName)
Next
End if
Catch Ex As Exception
End Try
Return lngDirSize
End Function
Ora, nel tuo rapporto, nella tua tabella, avresti per la cella che mostra la dimensione della cartella un'espressione simile a:
=Code.GetFolderSize(Fields!FolderPath.Value)
Dubito che questo approccio sia efficace per un rapporto visualizzato manualmente, ma potresti cavartela con piccoli set di risultati o un rapporto programmato consegnato via e-mail?
Oh, e questo pezzo suggerisce che potresti "imbatterti in problemi di autorizzazioni usando System.IO dall'interno di RS: http://blogs.sqlxml.org/bryantlikes/pages/824.aspx
Altri suggerimenti
Potresti chiarire chi dovrebbe fare cosa nel tuo scenario? Vuoi che SQL Server ottenga le informazioni o vuoi che Reporting Server lo faccia?
Che cosa intendi esattamente per " dimensione della cartella " ;? È " una cartella, riassumi ogni file " abbastanza o deve essere ricorsivo? Ad ogni modo, sceglierei una piccola funzione .NET personalizzata che utilizza System.IO.Directory
ed i suoi parenti.
Considererei di dividerlo in due parti, forse un servizio Windows per scansionare le directory e aggregare i dati in un database, quindi utilizzare SSRS per riportare sul database come al solito.
Il motivo per cui suggerisco questo è di usare master..xp_filesize ed è un parente l'account con cui il servizio SQL Server sta iniziando deve avere accesso ai percorsi da scansionare. Una volta che questo si trasformerà in percorsi di accesso su altre macchine, mi sentirei meno a mio agio con le implicazioni di sicurezza di ciò.
Spero che questo aiuti
In SSRS puoi farlo con l'aiuto dell'estensione dati personalizzata. Devi fornire il percorso dell'origine dati come nome della tua cartella e recupererà i tuoi file e le relative informazioni e li visualizzerà
Per ulteriori riferimenti e dll personalizzate usare questo http://www.devx.com/dbzone/Article/31336/ 0 / page / 4
L'ho già fatto in precedenza.
Nota: è necessario apportare modifiche correlate ai file di configurazione di Progettazione report e Gestione report.