Guida di SSRS 2005 - è necessario ottenere le dimensioni del file da TSQL (percorso specificato nella colonna). Chiunque?

StackOverflow https://stackoverflow.com/questions/164324

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!

È stato utile?

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.

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