Aide SSRS 2005 - Nécessité d’obtenir la taille du fichier dans TSQL (chemin spécifié dans la colonne). N'importe qui?
-
03-07-2019 - |
Question
Je dois obtenir la taille du dossier et afficher les informations dans un rapport (SSRS). Je dois faire cela pour un certain nombre de bases de données (en boucle!). Ces bases de données sont des moteurs de sites Web. Est-ce que quelqu'un a déjà fait ça? Pouvez-vous s'il vous plaît m'indiquer des exemples ou la bonne direction? Est-ce que xp_filesize et autres sont la bonne solution? Au secours!
La solution
En examinant la question et la réponse de Tomalak, je suppose que le serveur de rapports sera en mesure d'accéder aux dossiers contenus dans la base de données:
Tout d’abord, configurez la requête pour vous renvoyer l’ensemble des chemins d'accès au résultat - je suppose que vous n'aurez aucun problème avec cette partie. Vous devrez ensuite ajouter une fonction de code personnalisée à votre rapport: http: / /msdn.microsoft.com/en-us/library/ms155798.aspx - Cette fonction prendra le chemin du dossier en tant que paramètre et transmettra la taille du dossier. Vous devrez écrire dans VB.Net si vous souhaitez incorporer le code dans le rapport, ou vous pouvez coder une DLL et l'introduire.
Exemple de bloc de code VB.Net (rappelez-vous qu'il peut être nécessaire de préfixer les objets avec 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
Désormais, dans votre rapport, dans votre tableau, vous auriez pour la cellule indiquant la taille du dossier une expression du type:
=Code.GetFolderSize(Fields!FolderPath.Value)
Je doute que cette approche soit performante pour un rapport affiché manuellement, mais vous pourriez vous en tirer pour de petits ensembles de résultats ou pour un rapport planifié envoyé par courrier électronique?
Oh, et cet article suggère que vous pouvez "rencontrer" des problèmes d'autorisations à l'aide de System.IO depuis RS: http://blogs.sqlxml.org/bryantlikes/pages/824.aspx
Autres conseils
Pourriez-vous préciser qui doit faire quoi dans votre scénario? Voulez-vous que SQL Server reçoive les informations ou voulez-vous que Reporting Server le fasse?
Qu'entendez-vous exactement par "taille du dossier"? Est-ce qu'un "dossier" résume chaque fichier " assez ou faut-il être récursif? Quoi qu'il en soit, je choisirais une petite fonction .NET personnalisée qui utilise System.IO.Directory
et ses proches.
Je envisagerais de scinder ce document en deux parties, peut-être un service Windows pour analyser les répertoires et regrouper les données dans une base de données, puis utiliser SSRS pour générer des rapports sur la base de données comme d'habitude.
La raison pour laquelle je suggère que cela est d'utiliser master..xp_filesize et que c'est le compte avec lequel le service SQL Server commence a besoin d'accéder aux chemins à analyser. Une fois que cela deviendrait un accès à des chemins sur d’autres machines, je serais moins à l’aise avec les implications en termes de sécurité.
J'espère que cela vous aidera
Dans SSRS, vous pouvez le faire à l’aide d’une extension de données personnalisée. Vous devez indiquer le chemin de la source de données sous forme de nom de dossier. Les fichiers et les informations connexes seront alors récupérés.
Pour plus de référence et une dll personnalisée, utilisez cette http://www.devx.com/dbzone/Article/31336/ 0 / page / 4
Je l'ai fait plus tôt.
Remarque: vous devez modifier les fichiers de configuration de Report Designer et de Report Manager.