Ayuda de SSRS 2005: es necesario obtener el tamaño del archivo desde TSQL (ruta especificada en la columna). ¿Nadie?
-
03-07-2019 - |
Pregunta
Necesito obtener el tamaño de Carpeta y mostrar la información en un informe (SSRS). Necesito hacer esto para varias bases de datos (¡bucle!). Estos DB's son backends de sitios web. ¿Alguien ha hecho esto antes? ¿Me puede indicar algunas muestras o la dirección correcta? ¿Tiene xp_filesize y similares la solución correcta? ¡Ayuda!
Solución
Mirando la pregunta y la respuesta de Tomalak, y asumo que el servidor de informes podrá acceder a las carpetas que se encuentran en la base de datos:
Primero configure la consulta para recuperar el conjunto de resultados de las rutas. Supongo que no tendrá problemas con esta parte. A continuación, deberá agregar una función de código personalizado a su informe: http: / /msdn.microsoft.com/en-us/library/ms155798.aspx : esta función tomará la ruta de la carpeta como un parámetro y devolverá el tamaño de la carpeta. Tendrá que escribir en VB.Net si desea incrustar el código en el informe, o podría codificar una DLL y agregarla.
Un ejemplo de bloque de código VB.Net (recuerde que es posible que tenga que prefijar los objetos 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
Ahora, en tu informe, en tu tabla, tendrías para la celda que muestra el tamaño de la carpeta una expresión algo como:
=Code.GetFolderSize(Fields!FolderPath.Value)
Dudo que este enfoque sea eficaz para un informe visualizado manualmente, pero puede salirse con la suya para conjuntos de resultados pequeños o un informe programado entregado por correo electrónico.
Ah, y esta parte sugiere que puede 'tener' problemas de permisos al usar System.IO desde RS: http://blogs.sqlxml.org/bryantlikes/pages/824.aspx
Otros consejos
¿Podría aclarar quién debe hacer qué en su situación? ¿Desea que SQL Server obtenga la información o desea que Reporting Server lo haga?
¿Qué quiere decir exactamente con " tamaño de carpeta " ;? Es " una carpeta, resume cada archivo " ¿Es suficiente o necesita ser recursivo? De cualquier manera, me gustaría una pequeña función .NET personalizada que use System.IO.Directory
y sus parientes.
Consideraría dividir esto en dos partes, tal vez un Servicio de Windows para escanear los directorios y agregar los datos en una base de datos, luego usar SSRS para informar sobre la base de datos como de costumbre.
La razón por la que sugiero esto es usar master..xp_filesize y es así que la cuenta con la que el servicio de SQL Server está comenzando necesita acceso a las rutas que se analizarán. Una vez que esto se convierta en acceso a rutas en otras máquinas, me sentiría menos cómodo con las implicaciones de seguridad de eso.
Espero que esto ayude
En SSRS puede hacer esto con la ayuda de la extensión de datos personalizada. Necesitas dar la ruta para el origen de datos como nombre de carpeta y recuperará tus archivos y las informaciones relacionadas y se mostrará
Para mayor referencia y dll personalizado use este http://www.devx.com/dbzone/Article/31336/ 0 / página / 4
He hecho esto antes.
Nota: debe realizar cambios relacionados con los archivos de configuración de Report Designer y Report Manager.