SSRS Report Viewer不检测数据源?

时间:2012-10-08 19:38:19

标签: c# asp.net ssrs-2008 reporting-services

我在ReportBuilder 3.0中构建了一个非常简单的报告(.rdl)。它与我的数据库有连接,并从地址字段中获取城市。

SELECT TOP 10 City, COUNT(City) FROM [MYDB].[dbo].[ResidentialAddress] WHERE StateName = 'WA' OR StateName = 'Washington' GROUP BY City ORDER BY COUNT(City) DESC

这适用于ReportBuilder。我保存并关闭。然后我尝试通过MicroSoft.Reporting.WebForms.ReportViewer在VS 2010中打开并查看报告。我可以在我的c#/ ASP.NET网站本地加载一个完全空白的RDL文件(仅文本)。

            this.MyReportViewer.Reset();
            this.MyReportViewer.ProcessingMode = ProcessingMode.Local;
            this.MyReportViewer.AsyncRendering = false;
            this.MyReportViewer.LocalReport.LoadReportDefinition(new StreamReader("H:\\DataReportsViewer\\DataReportsViewer\\" + RDLFileList.SelectedValue));
            this.MyReportViewer.LocalReport.ReportPath = RDLFileList.SelectedValue;          
            this.MyReportViewer.ShowReportBody = true;
            this.MyReportViewer.LocalReport.Refresh();

但是,只要我添加图表,就会收到此错误:

  

尚未为数据源提供数据源实例   '数据集1'。

对我来说没有意义,因为当我打开RDL文件时,连接字符串和查询就在那里,看起来应该是这样。

<DataSources>
    <DataSource Name="DataSource1">
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString>Data Source=MYSERVER;Initial Catalog=Ad_Dev</ConnectString>
        <IntegratedSecurity>true</IntegratedSecurity>
      </ConnectionProperties>
      <rd:SecurityType>Integrated</rd:SecurityType>
      <rd:DataSourceID>350f6976-9402-43fd-b8f8-8f809f116f84</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="DataSet1">
      <Query>
        <DataSourceName>DataSource1</DataSourceName>
        <CommandText>SELECT TOP 10 ResidentialAddress.City,COUNT(ResidentialAddress.City)
FROM ResidentialAddress
WHERE StateName = 'WA'
GROUP BY ResidentialAddress.City
ORDER BY COUNT(ResidentialAddress.City)</CommandText>
        <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
      <Fields>
        <Field Name="City">
          <DataField>City</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="ID">
          <DataField />
          <rd:TypeName>System.Int32</rd:TypeName>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>

所以,我在c#代码中尝试了解决方法:

            //Added line: TestDataSource runs same query and returns correctly loaded DataTable
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", TestDataSource()); 
            this.MyReportViewer.LocalReport.DataSources.Add(reportDataSource);

然后运行,但没有数据出现。我不能赢! :(

有什么想法吗? SSRS和ASP.NET是不是意味着互相玩耍?我本来希望制作一个本报告查看器的本地测试版本,但我已经不得不做很多黑客甚至让空白报告在本地运行。

1 个答案:

答案 0 :(得分:2)

在本地处理模式下,必须通过调用代码提供数据集,即主机程序必须执行所有查询并将该数据传递给报表查看器。以下是示例http://www.gotreportviewer.com/definedata/index.html在正面,任何数据都可以传递到报表查看器(http://www.gotreportviewer.com/objectdatasources/index.html