更新数据源,并从C#
编辑SSRS 2012部署的DataSet参考:我想我可以简化这个问题有点要求是需要只知道什么:更新数据源,并从C#
我与C#中使用的SSRS 2010网站工作服务: 'ReportService2010.asmx'http://technet.microsoft.com/en-us/library/ee640743.aspx
我可以使用方法'CreateDataSource'在SSRS服务器http://(servername)/ ReportServer的实例上创建数据源。
我还可以使用方法'CreateCatalogItem'在服务器上创建一个引用项目的RDL本地文件的报告,将其序列化为一个字节数组,然后将其作为'Definition'传递给在其上创建它的方法服务器。
现在我所做的一切与一个警告,以及一个主要的作品。我只能将所有内容部署到同一个文件夹。如果我部署数据源来说'数据源'文件夹,然后报告说:'测试报告',报告不知道它有一个共享的数据源来引用不同的位置。因此,我在technet文章中挖了一点点,并试图'GetItemDataSources'方法,但它只给出了ReportingService2010.DataSource返回类型的名称和类型。 有谁知道链接了一个“报告”或数据源“数据集的的CatalogItem财产“的方法,所以当部署指向在SSRS服务器上的不同文件夹中的参考?必须有办法做到这一点,因为我知道我可以从商业智能开发工作室进行部署,并且可以执行此操作。
回答:
我已经部署报告文件时,类似的问题;当通过rs.exe或代码进行部署时,会遇到报告失去与数据源链接的问题。
我们通过我们的应用程序部署后立即解决了这个由明确指向服务器端的数据源的报告;这是类似于你想要做什么?
总之,这里的稍微适应代码我们在报告中部署应用程序中使用:
static void SetReportDataSource(string reportPath) {
string dsPath = CombinePath(DataSourcePath, DataSourceFolder, DataSourceName);
DataSourceReference dsRef = new DataSourceReference()
{
Reference = dsPath
};
DataSource ds = new DataSource();
ds.Item = dsRef as DataSourceDefinitionOrReference;
ds.Name = DataSourceName;
var rptDataSources = Server.GetItemDataSources(reportPath);
foreach (var rptDs in rptDataSources)
{
Server.SetItemDataSources(filePath, new DataSource[] { ds });
}
}
所以,基本上我们有这样定义数据源名称,数据源位置上的服务器信息变量,同样报告。他们可以在不同的文件夹中。
在此基础上,我们创建了一个新的参照数据源,然后重新指向使用SetItemDataSources
这个报告。
此整理出数据源的问题对我来说,反正。不确定共享数据集以及它们如何处理所有这些,但希望这会有所帮助。
此外,只是认为这将使用ReportService2005
端点,但ReportService2010
可能不会太不同。
编辑:
对于这里提到的路径,这些是相对于服务器,例如/Reports/
。在定义包含目标的ReportService2010
对象的Url
属性时,不需要全限定名称。
回答:
也许这可能是一些帮助。我用它来重新设置数据源在给定的父文件夹的所有报告,它的子文件夹:
using System; using GetPropertiesSample.ReportService2010;
using System.Diagnostics;
using System.Collections.Generic; //<== required for LISTS
using System.Reflection;
namespace GetPropertiesSample
{
class Program
{
static void Main(string[] args)
{
GetListOfObjectsInGivenFolder_and_ResetTheReportDataSource("0_Contacts"); //<=== This is the parent folder
}
private static void GetListOfObjectsInGivenFolder_and_ResetTheReportDataSource(string sParentFolder)
{
// Create a Web service proxy object and set credentials
ReportingService2010 rs = new ReportingService2010();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
CatalogItem[] reportList = rs.ListChildren(@"/" + sParentFolder, true);
int iCounter = 0;
foreach (CatalogItem item in reportList)
{
iCounter += 1;
Debug.Print(iCounter.ToString() + "]#########################################");
if (item.TypeName == "Report")
{
Debug.Print("Report: " + item.Name);
ResetTheDataSource_for_a_Report(item.Path, "/DataSources/Shared_New"); //<=== This is the DataSource that I want them to use
}
}
}
private static void ResetTheDataSource_for_a_Report(string sPathAndFileNameOfTheReport, string sPathAndFileNameForDataSource)
{
//from: http://stackoverflow.com/questions/13144604/ssrs-reportingservice2010-change-embedded-datasource-to-shared-datasource
ReportingService2010 rs = new ReportingService2010();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
string reportPathAndName = sPathAndFileNameOfTheReport;
//example of sPathAndFileNameOfTheReport "/0_Contacts/207_Practices_County_CareManager_Role_ContactInfo";
List<ReportService2010.ItemReference> itemRefs = new List<ReportService2010.ItemReference>();
ReportService2010.DataSource[] itemDataSources = rs.GetItemDataSources(reportPathAndName);
foreach (ReportService2010.DataSource itemDataSource in itemDataSources)
{
ReportService2010.ItemReference itemRef = new ReportService2010.ItemReference();
itemRef.Name = itemDataSource.Name;
//example of DataSource i.e. 'itemRef.Reference': "/DataSources/SharedDataSource_DB2_CRM";
itemRef.Reference = sPathAndFileNameForDataSource;
itemRefs.Add(itemRef);
}
rs.SetItemReferences(reportPathAndName, itemRefs.ToArray());
}
}
}
以上是 更新数据源,并从C# 的全部内容, 来源链接: utcz.com/qa/260290.html