Справка по SSRS 2005 - необходимо получить размер файла из TSQL (путь указан в столбце). Кто-нибудь? - PullRequest
1 голос
/ 03 октября 2008

Мне нужно получить размер папки и отобразить информацию в отчете (SSRS). Мне нужно сделать это для ряда баз данных (цикл!). Эти базы данных являются бэкэндами веб-сайтов. Кто-нибудь делал это раньше? Можете ли вы указать мне некоторые образцы или правильное направление? Правильное ли решение xp_filesize и тому подобное? Помогите!

Ответы [ 4 ]

1 голос
/ 09 октября 2008

Рассматривая вопрос и ответ Томалака, я предполагаю, что сервер отчетов сможет обращаться к папкам, хранящимся в БД:

Во-первых, настройте запрос, чтобы получить обратно набор результатов путей - я полагаю, у вас не возникнет проблем с этой частью. Затем вам нужно добавить пользовательскую функцию кода в ваш отчет: 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)

Я сомневаюсь, что этот подход будет эффективен для отчета, просматриваемого вручную, но вы можете сойти с рук для небольших наборов результатов или запланированного отчета, доставленного по электронной почте?

О, и эта часть предполагает, что вы можете "столкнуться" с проблемами разрешений при использовании System.IO из RS: http://blogs.sqlxml.org/bryantlikes/pages/824.aspx

0 голосов
/ 03 ноября 2008

В SSRS вы можете сделать это с помощью пользовательского расширения данных. Вам нужно указать путь к источнику данных в качестве имени вашей папки, и он извлечет ваши файлы и связанную с ними информацию и отобразит

Для дальнейшего использования и пользовательских dll используйте это http://www.devx.com/dbzone/Article/31336/0/page/4

Я делал это раньше.

Примечание. Необходимо внести соответствующие изменения в файлы конфигурации конструктора отчетов и диспетчера отчетов.

0 голосов
/ 28 октября 2008

Я хотел бы разделить это на две части, возможно, Служба Windows для сканирования каталогов и агрегирования данных в базу данных, а затем использовать SSRS для создания отчетов о базе данных, как обычно.

Причина, по которой я предлагаю это, заключается в том, чтобы использовать master..xp_filesize, и это является той учетной записью, с которой запускается служба SQL Server, и которой требуется доступ к сканируемым путям. Как только это превратится в доступ к путям на других машинах, мне будет не по себе от последствий для безопасности.

Надеюсь, это поможет

0 голосов
/ 07 октября 2008

Не могли бы вы уточнить, кто что должен делать в вашем сценарии? Вы хотите, чтобы SQL Server получал информацию, или вы хотите, чтобы Reporting Server делал это?

Что именно вы подразумеваете под "размером папки"? Достаточно ли «одной папки, суммировать каждый файл» или она должна быть рекурсивной? В любом случае, я бы выбрал небольшую пользовательскую функцию .NET, которая использует System.IO.Directory и его родственников.

...