SSRS的ReportViewer问题XML嵌入数据源(SSRS ReportViewer prob

2019-08-07 23:54发布

我有我想要显示的ReportViewer控件一个SSRS报告C#(WPF)应用程序。 本地报表文件嵌入了XML数据源。 从SQL Server商业智能开发套件运行时,该报告显示正确。 但是,当我与我的应用程序运行,我得到了以下错误:

A data source instance has not been supplied for the data source '...'.

因此,这里是我在做什么:

我已经定义了嵌入的XML数据,在本教程中解释从嵌入XML数据定义报表数据集 。 我有一个数据源叫做XmlDataSource_TopCustomers并称为数据集XmlDataSet_TopCustomers ,使用该数据源。 我所提到的数据表和图表设置。 总体而言,RDL看起来像这样(只是必要的,当然):

    <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
      <Body>
        <ReportItems>
          <Tablix Name="Tablix1">
            <DataSetName>XmlDataSet_TopCustomers</DataSetName>
          </Tablix>
          <Chart Name="Chart1">
            <DataSetName>XmlDataSet_TopCustomers</DataSetName>
          </Chart>
        </ReportItems>
      </Body>
      <DataSources>
        <DataSource Name="XmlDataSource_TopCustomers">
          <ConnectionProperties>
            <DataProvider>XML</DataProvider>
            <ConnectString />
          </ConnectionProperties>
          <rd:SecurityType>None</rd:SecurityType>
          <rd:DataSourceID>47833b52-231f-4634-8af4-3c63272b02a7</rd:DataSourceID>
        </DataSource>
      </DataSources>
      <DataSets>
        <DataSet Name="XmlDataSet_TopCustomers">
          <Query>
            <DataSourceName>XmlDataSource_TopCustomers</DataSourceName>
            <CommandText><Query>
     <ElementPath>Root /CustomerOrder {@CustomerNo, @CustomerName, @OrdersCount (Integer), @Total(Float), @AveragePerOrder(Float)}</ElementPath>
     <XmlData>
      <Root>
    <CustomerOrder CustomerNo="10001" CustomerName="Name 1" OrdersCount="2" Total="5.446740000000000e+003" AveragePerOrder="2.723370000000000e+003" />
    <CustomerOrder CustomerNo="10894" CustomerName="Name 2" OrdersCount="5" Total="3.334750000000000e+003" AveragePerOrder="6.669500000000001e+002" />
    <CustomerOrder CustomerNo="12980" CustomerName="Name 3" OrdersCount="2" Total="2.003290000000000e+003" AveragePerOrder="1.001645000000000e+003" />
      </Root>
     </XmlData>
    </Query></CommandText>
            <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
          </Query>
          <Fields>...
        
      </DataSets>
      <rd:ReportUnitType>Inch</rd:ReportUnitType>
      <rd:ReportID>02172db8-2a1d-4c35-9555-b37ee6193544</rd:ReportID>
    </Report>

此时一切从IDE正常工作。

在我的C#应用​​程序,我有一个的ReportViewer和下面的代码:

Viewer.LocalReport.ReportPath = @"<actualpath>\TopCustomers.rdl"; // actual path is OK
Viewer.RefreshReport();

然后我得到的

A data source instance has not been supplied for the data source 'XmlDataSet_TopCustomers'.

我见过有同样的问题其他人,但在大多数的情况下,问题是多个数据源,这是不是这里的情况,你可以从上面的RDL片段看到。

有什么建议?

Answer 1:

在回答我的问题也可以在这里找到何时使用RDLC RDL上报告? 这里http://www.gotreportviewer.com/ 。 它基本上是这样的:

不同的是报表服务器ReportViewer控件不连接到数据库或执行查询。 此外,在本地模式下唯一可用的导出格式的Excel,Word和PDF。 (在远程模式报表服务器支持的所有格式都可用。)ReportViewer控件无法通过添加自定义渲染器或自定义报表项进行扩展。

更多信息可以在这里找到http://msdn.microsoft.com/en-us/library/ms252109(v=vs.80).aspx 。

ReportViewer控件,其处理.rdlc文件,忽略RDL的元件。 如果报表定义包含查询,控制不会处理它。

当转换.rdl文件到.rdlc格式,您必须手动替换的数据源和数据结构的报表定义在应用程序中提供的查询信息

所以,你必须明确地获取数据,并提供给ReportViewer作为ReportDataSource具有完全相同的名称作为RDL文件中的数据集。



Answer 2:

我有一个小的命令行应用程序,有类似的功能,但定义报表路径和做与报表查看器什么我设置报表的数据源之间的对抗中运行:

report.DataSources.Add(new ReportDataSource("DataSet_for_Distribution", table));

......表是一个数据表。

从那以后,我没有问题编程调用报告Render方法。

您可以设置渲染,看看数据源的报告实际上有前休息一下?

另一件事尝试,它可能只是您的格式(或堆放格式)它张贴在这里,但是当我嵌入XML数据在报表中设置它是所有使用这样的格式:

<CommandText>&lt;Query&gt;
    &lt;ElementPath&gt;Root /S  {@OrderDate (Date), @TotalDue (Decimal)} /C {@LastName} &lt;/ElementPath&gt;
    &lt;XmlData&gt;
    &lt;Root&gt;
    &lt;S OrderDate="2003-07-01T00:00:00" SalesOrderNumber="SO51131" TotalDue="247913.9138"&gt;
      &lt;C FirstName="Shu" LastName="Ito" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2003-10-01T00:00:00" SalesOrderNumber="SO55282" TotalDue="227737.7215"&gt;
      &lt;C FirstName="Shu" LastName="Ito" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2002-07-01T00:00:00" SalesOrderNumber="SO46616" TotalDue="207058.3754"&gt;
      &lt;C FirstName="Jae" LastName="Pak" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2002-08-01T00:00:00" SalesOrderNumber="SO46981" TotalDue="201490.4144"&gt;
      &lt;C FirstName="Ranjit" LastName="Varkey Chudukatil" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2002-09-01T00:00:00" SalesOrderNumber="SO47395" TotalDue="198628.3054"&gt;
      &lt;C FirstName="Michael" LastName="Blythe" /&gt;
    &lt;/S&gt;
    &lt;/Root&gt;
    &lt;/XmlData&gt;
    &lt;/Query&gt;</CommandText>


Answer 3:

我不从,如果数据源已指定的凭证你说什么肯定。

这里本部分:

<ConnectionProperties>
            <DataProvider>XML</DataProvider>
            <ConnectString />
          </ConnectionProperties>

一般用SQL数据源说话时报告没有查看他人或应用中,由于托管服务器承担不同的凭据,比你的IDE构建应用程序。 它不知道,如果我的名字是布雷特,即远程调用它时我的凭据运行它。 当指定服务器上的凭据托管报告通常可以解决这个问题。 你去到服务器托管的报告,我认为你这样做是因为你有一个“RDL”报告与一个RDLC报告。 找到数据源,单击属性,更改设置为“使用这些凭据”。 供应,你知道的工作凭证。

这可能会解决这个问题。 我不能肯定与SharePoint连接和XML连接,但是这是与SQL Server连接观看的问题普遍。



文章来源: SSRS ReportViewer problems with XML embedded data source