Ayuda de SSRS 2005: es necesario obtener el tamaño del archivo desde TSQL (ruta especificada en la columna). ¿Nadie?

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

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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top