Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何以编程方式将指定的数据源分配给SSRS.RDL文件?ReportingService2010()_C#_Reporting Services_Datasource_Reportservice2010 - Fatal编程技术网

c#如何以编程方式将指定的数据源分配给SSRS.RDL文件?ReportingService2010()

c#如何以编程方式将指定的数据源分配给SSRS.RDL文件?ReportingService2010(),c#,reporting-services,datasource,reportservice2010,C#,Reporting Services,Datasource,Reportservice2010,我正在创建一个应用程序,将SSRS.rdl文件上载到报表服务器。这是在使用ReportingService2010() .RDL文件的上传工作正常 接下来,应用程序应该为上传的.RDL文件分配一个指定的数据源,但是这个元素失败了。我的代码如下所示: DataSource[] dsarray = new DataSource[1]; string DSName = "MyDataSource"; DataSourceReference reference = new DataSourceRef

我正在创建一个应用程序,将SSRS.rdl文件上载到报表服务器。这是在使用ReportingService2010()

.RDL文件的上传工作正常

接下来,应用程序应该为上传的.RDL文件分配一个指定的数据源,但是这个元素失败了。我的代码如下所示:

DataSource[] dsarray = new DataSource[1];

string DSName = "MyDataSource";

DataSourceReference reference = new DataSourceReference();

DataSource ds = new DataSource();

dsarray[0] = new DataSource();

reference.Reference = "/" + DSName;

ds.Item = reference;
ds.Name = "/" + DSName;

dsarray[0] = ds;

rs.SetItemDataSources("/" + location + "/" + filename, dsarray);
我收到以下错误消息:

发生以下错误:

找不到数据源“/MyDataSource”。 Microsoft.ReportingServices.Diagnostics.Utilities.DataSourceNotFoundException: 找不到数据源“/MyDataSource”

我很确定我已经很接近了,但我就是不能让它工作。我已经尝试了许多不同的解决方案&广泛地在线查看(包括堆栈溢出!),但我找不到与我的问题相关的示例。大多数讨论都与ReportingServices2005有关

我应该提到我的数据源位于根文件夹“/”中,因为这是一个开发服务器

我对c#比较缺乏经验,所以可能我遗漏了一些明显的东西。
非常感谢您提供的任何信息/想法,提前表示感谢。

经过大量研究和失败的尝试,我终于找到了解决方案

下面的代码将从下拉列表ddDataSourceSelect中选择的数据源分配给所需的SSRS.rdl文件:

string DSName = ddDataSourceSelect.SelectedValue.ToString();

List<ReportService2010.ItemReference> itemRefs = new List<ReportService2010.ItemReference>();
ReportService2010.DataSource[] itemDataSources = rs.GetItemDataSources("/" + location + "/" + filename);

foreach (ReportService2010.DataSource itemDataSource in itemDataSources)
{
    ReportService2010.ItemReference itemRef = new ReportService2010.ItemReference();
    itemRef.Name = itemDataSource.Name;

    itemRef.Reference = "/" + DSName;

    itemRefs.Add(itemRef);
}

rs.SetItemReferences("/" + location + "/" + filename, itemRefs.ToArray());
string DSName=ddDataSourceSelect.SelectedValue.ToString();
List itemRefs=新列表();
ReportService2010.DataSource[]itemDataSources=rs.GetItemDataSources(“/”+位置+“/”+文件名);
foreach(ReportService2010.DataSource itemDataSource中的itemDataSource)
{
ReportService2010.ItemReference itemRef=新的ReportService2010.ItemReference();
itemRef.Name=itemdasource.Name;
itemRef.Reference=“/”+DSName;
itemRefs.Add(itemRef);
}
rs.SetItemReferences(“/”+位置+“/”+文件名,itemRefs.ToArray());
这不是简单地嵌入数据源,而是重置数据源。我认为关键的变化是使用了“SetItemReferences()”而不是“SetItemDataSources()”。我不会猜到的

非常感谢下面的帖子,他们的解决方案让我解决了这个问题:


我希望此解决方案可以帮助其他编码人员:)

检查“数据源”的权限,并将其与报表的权限进行比较。他们匹配吗?不幸的是他们匹配。我很自信这个问题是基于代码的(尽管我可能错了)。谢谢你的建议。这篇文章的代码与你的非常相似,但是你的文章缺少一些微妙的细节。谢谢你的建议。我已经分析了代码,并做了一些小的修改,但仍然收到“DataSourceNotFoundException:”错误消息。我已经查看了“ReportServer$REPORTING”数据库&我指定的数据源路径和名称绝对正确。奇怪的是,我可以毫无问题地部署报告。重新启动报表服务器也没有帮助。我真的很困惑!如果使用记事本打开.RDL文件并查看
元素,那么
名称是“MyDataSource”还是“/MyDataSource”,还是其他内容?