2

フォルダーのサイズを取得し、レポート (SSRS) に情報を表示する必要があります。多数のデータベースに対してこれを行う必要があります (ループ!)。これらの DB は Web サイトのバックエンドです。誰もこれを以前にやったことがありますか?いくつかのサンプルまたは正しい方向を教えてください。xp_filesize などは正しい解決策ですか? ヘルプ!

4

4 に答える 4

2

質問と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

于 2008-10-09T11:32:21.767 に答える
1

SSRS では、カスタム データ拡張機能を使用してこれを行うことができます。フォルダー名としてデータソースのパスを指定する必要があります。これにより、ファイルとその関連情報が取得され、表示されます

詳細な参照とカスタム dll については、http://www.devx.com/dbzone/Article/31336/0/page/4 を使用して ください。

私は以前にこれをしました。

注: Report Designer および Report Manager 構成ファイルに関連する変更を行う必要があります。

于 2008-11-03T09:48:27.977 に答える
1

これを 2 つの部分に分割することを検討します。Windows サービスでディレクトリをスキャンしてデータをデータベースに集約し、SSRS を使用して通常どおりデータベースについて報告します。

これをお勧めする理由は、master..xp_filesize を使用することです。これは、SQL Server サービスを開始するアカウントに似ているため、スキャンするパスへのアクセスが必要です。これが他のマシンのパスにアクセスするようになると、そのセキュリティへの影響に不安を感じるでしょう。

お役に立てれば

于 2008-10-28T11:20:56.393 に答える
1

あなたのシナリオで誰が何をすべきかを明確にしていただけますか? SQL Server に情報を取得させますか、それとも Reporting Server に情報を取得させますか?

「フォルダサイズ」とは正確には何を意味しますか?「1つのフォルダー、各ファイルを合計する」で十分ですか、それとも再帰的にする必要がありますか? いずれにせよ、私はSystem.IO.Directory親戚を使用する小さなカスタム .NET 関数を使用します。

于 2008-10-07T17:59:04.777 に答える