フォルダーのサイズを取得し、レポート (SSRS) に情報を表示する必要があります。多数のデータベースに対してこれを行う必要があります (ループ!)。これらの DB は Web サイトのバックエンドです。誰もこれを以前にやったことがありますか?いくつかのサンプルまたは正しい方向を教えてください。xp_filesize などは正しい解決策ですか? ヘルプ!
4 に答える
質問とTomalakの応答を見て、レポートサーバーがDBに保持されているフォルダーに到達できると想定しています:
最初に、パスの結果セットを取得するためのクエリを設定します。この部分で問題はないと思います。次に、カスタム コード関数をレポートに追加する必要があります: 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
SSRS では、カスタム データ拡張機能を使用してこれを行うことができます。フォルダー名としてデータソースのパスを指定する必要があります。これにより、ファイルとその関連情報が取得され、表示されます
詳細な参照とカスタム dll については、http://www.devx.com/dbzone/Article/31336/0/page/4 を使用して ください。
私は以前にこれをしました。
注: Report Designer および Report Manager 構成ファイルに関連する変更を行う必要があります。
これを 2 つの部分に分割することを検討します。Windows サービスでディレクトリをスキャンしてデータをデータベースに集約し、SSRS を使用して通常どおりデータベースについて報告します。
これをお勧めする理由は、master..xp_filesize を使用することです。これは、SQL Server サービスを開始するアカウントに似ているため、スキャンするパスへのアクセスが必要です。これが他のマシンのパスにアクセスするようになると、そのセキュリティへの影響に不安を感じるでしょう。
お役に立てれば
あなたのシナリオで誰が何をすべきかを明確にしていただけますか? SQL Server に情報を取得させますか、それとも Reporting Server に情報を取得させますか?
「フォルダサイズ」とは正確には何を意味しますか?「1つのフォルダー、各ファイルを合計する」で十分ですか、それとも再帰的にする必要がありますか? いずれにせよ、私はSystem.IO.Directory
親戚を使用する小さなカスタム .NET 関数を使用します。