代码之家  ›  专栏  ›  技术社区  ›  MarlonRibunal

ssrs 2005帮助-需要从tsql(列中指定的路径)中获取文件大小。有人吗?

  •  1
  • MarlonRibunal  · 技术社区  · 16 年前

    我需要获取文件夹大小并在报告(SSR)上显示信息。我需要为许多数据库(循环!)这些数据库是网站的后端。以前有人做过吗?你能给我指一些样品或正确的方向吗?xp文件大小等是否是正确的解决方案?救命!

    4 回复  |  直到 15 年前
        1
  •  1
  •   Meff    16 年前

    查看问题和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

        2
  •  0
  •   Tomalak    16 年前

    你能说明在你的场景中谁应该做什么吗?您希望SQL Server获取信息还是希望报表服务器执行此操作?

    “文件夹大小”究竟是什么意思?“一个文件夹,总结每个文件”足够吗?还是需要递归?不管怎样,我都会使用一些自定义的.NET函数 System.IO.Directory 而且是亲戚。

        3
  •  0
  •   James Green    16 年前

    我会考虑将它分成两部分,可能是Windows服务扫描目录并将数据聚合到数据库中,然后像往常一样使用SSR报告数据库。

    我建议这样做的原因是使用master..xp_filesize,它与SQL Server服务启动时需要访问要扫描路径的帐户相同。一旦这变成了其他机器上的访问路径,我就不太愿意接受它的安全含义。

    希望这有帮助

        4
  •  0
  •   balaweblog    16 年前

    在SSR中,您可以借助自定义数据扩展来实现这一点。您需要将数据源的路径作为文件夹名,它将检索您的文件及其相关信息并显示

    为了进一步参考和自定义dll,请使用此 http://www.devx.com/dbzone/Article/31336/0/page/4

    我以前做过。

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