Справка по SSRS 2005 - необходимо получить размер файла из TSQL (путь указан в столбце). Кто-нибудь?
-
03-07-2019 - |
Вопрос
Мне нужно получить размер папки и отобразить информацию в отчете (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 р>
Я сделал это раньше.
Примечание. Необходимо внести соответствующие изменения в файлы конфигурации конструктора отчетов и диспетчера отчетов.