SSRS 2005帮助-需要从TSQL(列中指定的路径)中获取文件大小。任何人?

时间:2020-03-06 15:02:51  来源:igfitidea点击:

我需要获取文件夹大小并在报告(SSRS)上显示信息。我需要对许多数据库执行此操作(循环!)。这些数据库是网站的后端。有人做过吗?我们能给我指出一些样品或者正确的方向吗? xp_filesize之类的解决方案正确吗?帮助!

解决方案

我们能否阐明在情况下谁应该做些什么?我们想让SQL Server获取信息还是让Reporting Server做到这一点?

"文件夹大小"到底是什么意思? "一个文件夹,总结每个文件"是否足够?还是需要递归?无论哪种方式,我都会使用一个自定义的.NET函数,该函数使用System.IO.Directory及其亲戚。

查看问题和Tomalak的答复,我假设报告服务器将能够访问数据库中保存的文件夹:

首先,设置查询以使我们返回路径的结果集,我认为我们对此部分不会有任何问题。接下来,我们需要向报表中添加自定义代码功能:http://msdn.microsoft.com/zh-cn/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

我考虑将其分为两部分,也许是Windows服务来扫描目录并将数据聚合到数据库中,然后像往常一样使用SSRS来报告数据库。

我建议这样做的原因是使用master..xp_filesize,并且它是SQL Server服务开始使用的帐户的同类,该帐户需要访问要扫描的路径。一旦这变成了访问其他机器上的路径,我就会对它的安全性感到不满意。

希望这可以帮助

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

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

我之前已经做过。

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