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

StackOverflow https://stackoverflow.com/questions/164324

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top