我需要获取文件夹大小并在报告(SSRS)上显示信息。我需要为许多数据库(循环!)执行此操作。这些数据库是网站的后端。有没有人这样做过?你能指点我一些样品或正确的方向吗?xp_filesize 之类的解决方案是否正确?帮助!
4 回答
查看问题和 Tomalak 的回复,我假设报告服务器将能够访问数据库中保存的文件夹:
首先设置查询以让您返回路径的结果集 - 我假设您对这部分没有任何问题。接下来,您需要在报告中添加自定义代码函数:http: //msdn.microsoft.com/en-us/library/ms155798.aspx - 此函数将文件夹路径作为参数,并传回文件夹的大小。如果您想在报告中嵌入代码,您必须在 VB.Net 中编写,或者您可以编写一个 DLL 并将其引入。
一个示例 VB.Net 代码块(请记住,您可能需要为对象添加 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
现在,在您的报告中,在您的表格中,对于显示文件夹大小的单元格,您将拥有类似以下的表达式:
=Code.GetFolderSize(Fields!FolderPath.Value)
我怀疑这种方法对于手动查看的报告是否有效,但是对于小型结果集或通过电子邮件发送的预定报告,您可能会侥幸逃脱?
哦,这篇文章建议您“可能”在 RS 中使用 System.IO 遇到权限问题:http: //blogs.sqlxml.org/bryantlikes/pages/824.aspx
您能否澄清在您的场景中谁应该做什么?您希望 SQL Server 获取信息还是希望 Reporting Server 获取信息?
“文件夹大小”到底是什么意思?“一个文件夹,总结每个文件”足够还是需要递归?无论哪种方式,我都会使用一个小的自定义 .NET 函数,它使用System.IO.Directory
它的亲戚。
我会考虑把它分成两部分,也许是一个 Windows 服务来扫描目录并将数据聚合到数据库中,然后像往常一样使用 SSRS 来报告数据库。
我建议这样做的原因是使用 master..xp_filesize 并且它与 SQL Server 服务开始使用的帐户相关,需要访问要扫描的路径。一旦这变成访问其他机器上的路径,我就会对它的安全隐患感到不太舒服。
希望这可以帮助
在 SSRS 中,您可以借助自定义数据扩展来做到这一点。您需要将数据源的路径作为您的文件夹名称,它将检索您的文件及其相关信息并显示
如需进一步参考和自定义 dll,请使用此 http://www.devx.com/dbzone/Article/31336/0/page/4
我之前已经这样做了。
注意:您必须对报表设计器和报表管理器配置文件进行相关更改。