我需要获取文件夹大小并在报告(SSRS)上显示信息。我需要为许多数据库执行此操作(循环!)。这些DB是网站的后端。有没有人这样做过?你能指点一些样品或正确的方向吗? xp_filesize等是正确的解决方案吗?救命啊!

有帮助吗?

解决方案

查看问题和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执行此操作?

“文件夹大小”究竟是什么意思?是“一个文件夹,总结每个文件”足够还是需要递归?无论哪种方式,我都会选择一个使用 System.IO.Directory 的自定义.NET函数,它是亲戚。

我会考虑将其拆分为两部分,可能是扫描目录并将数据聚合到数据库中的Windows服务,然后使用SSRS照常报告数据库。

我建议这样做的原因是使用master..xp_filesize并且它是SQL Server服务启动的帐户,需要访问要扫描的路径。一旦这变成了访问其他机器上的路径,我就不太了解它的安全隐患。

希望这有帮助

在SSRS中,您可以借助自定义数据扩展来执行此操作。你需要提供数据源的路径作为你的文件夹名称,它将检索你的文件及其相关的信息并显示

有关进一步参考和自定义DLL,请使用此选项 http://www.devx.com/dbzone/Article/31336/ 0 /页/ 4

我之前已经这样做了。

注意:您必须对报表设计器和报表管理器配置文件进行相关更改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top