Aide SSRS 2005 - Nécessité d’obtenir la taille du fichier dans TSQL (chemin spécifié dans la colonne). N'importe qui?

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

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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top