簡體   English   中英

使用c#如何以編程方式檢查報表服務器上是否存在文件夾

[英]Using c# how can I programmatically check if a folder exists on my reporting server

我花了好幾個小時但沒有成功。

我使用c#以編程方式在SSRS中創建報告的快照,從而創建報告文件夾。 報告是在這些文件夾中創建的,但為了防止發生錯誤,我將刪除整個文件夾結構,然后重新創建報告以防止SSRS拋出異常。

我正在使用ReportingService2010。

ReportingService2010.DeleteItem(deleteFolderPath);

...

ReportingService2010.CreateFolder(folder, parentFolder, null);

- 這是我需要檢查文件夾和報告是否存在的行

var ret = CheckExist(linkedReportName, newParent);

var param = GetReportParameters(existingReportPath);

ReportingService2010.SetItemParameters(existingReportPath, param);

- 如果我不刪除文件夾結構,則會在try / Catch中拋出錯誤

ReportingService2010.CreateLinkedItem(linkedReportName, newParent, existingReportPath, props);

我需要添加一個方法來查看是否已創建報告和報告文件夾

另一種可能的替代方法是直接使用報表服務器數據庫中Catalog表的路徑,類型和parentid字段。 如果您打開SQL Server並查看該表,則應該非常清楚您需要做什么。

您可以使用C#來運行SQL命令,例如

SELECT COUNT(*) FROM CATALOG WHERE PATH LIKE '%TheFolderNameImLookingFor%'

如果計數大於零,則該文件夾存在。

您可以根據需要改變這一點。 文件夾項的類型為1; 報表項的類型為2,因此您可以使用它來區分報表和文件夾。

如何使用ListChildren刪除文件夾;

        var items = ReportingService2010.ListChildren(parentFolder, false);
        if (items.Where(x => x.TypeName == "Folder").Any(x => x.Name == folder))
        {
            ReportingService2010.DeleteItem(folder, parentFolder, null);
        }

我認為最好的方法是ReportService2010.GetItemType()方法。 這將返回一個字符串( ReportingService2010.ListItemTypes()方法),包括不存在的可能值"Unknown" (而不是拋出異常)或"Folder"

Directory.Exists()可能適合您。

if (Directory.Exists(folderString))
{
    // Do something
}

不要忘記System.IO命名空間:

using System.IO;

更新 :將來,如果您正在尋找文件,您可以使用File.Exists()執行相同的File.Exists() ,該文件也位於System.IO命名空間中。

if (!Directory.Exists(folder))
{
    ReportingService2010.CreateFolder(folder, parentFolder, null);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM