0

ReportViewer コントロールに SSRS レポートを表示する C# (WPF) アプリケーションがあります。ローカル レポート ファイルには、XML データソースが埋め込まれています。SQL Server Business Intelligence Development Studio から実行すると、レポートが正しく表示されます。しかし、アプリを実行すると、次のエラーが発生します。

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

だからここに私がやっていることがあります:

このチュートリアル埋め込み XML データからのレポート データセットの定義で説明されているように、埋め込み XML データを定義しました。というデータ ソースとXmlDataSource_TopCustomersというデータ セットがありXmlDataSet_TopCustomers、そのデータ ソースを使用しています。表とグラフでデータセットを参照しました。全体として、RDL は次のようになります (もちろん、必要不可欠なものだけです)。

    <レポート xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
      <本体>
        <レポート項目>
          <Tablix Name="Tablix1">
            <Da​​taSetName>XmlDataSet_TopCustomers</DataSetName>
          </タブリックス>
          <チャート名="チャート1">
            <Da​​taSetName>XmlDataSet_TopCustomers</DataSetName>
          </チャート>
        </ReportItems>
      </本文>
      <データソース>
        <Da​​taSource Name="XmlDataSource_TopCustomers">
          <接続プロパティ>
            <データプロバイダー>XML</データプロバイダー>
            <接続文字列 />
          </接続プロパティ>
          <rd:SecurityType>なし</rd:SecurityType>
          <rd:DataSourceID>47833b52-231f-4634-8af4-3c63272b02a7</rd:DataSourceID>
        </データソース>
      </データソース>
      <データセット>
        <Da​​taSet Name="XmlDataSet_TopCustomers">
          <クエリ>
            <Da​​taSourceName>XmlDataSource_TopCustomers</DataSourceName>
            <コマンドテキスト><クエリ>
     <ElementPath>ルート /CustomerOrder {@CustomerNo, @CustomerName, @OrdersCount (Integer), @Total(Float), @AveragePerOrder(Float)}</ElementPath>
     <Xmlデータ>
      <ルート>
    <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" />
      </ルート>
     </Xmlデータ>
    </クエリ></コマンドテキスト>
            <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
          </クエリ>
          <フィールド>...
        
      </データセット>
      <rd:ReportUnitType>インチ</rd:ReportUnitType>
      <rd:ReportID>02172db8-2a1d-4c35-9555-b37ee6193544</rd:ReportID>
    </レポート>

この時点で、すべてが 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 スニペットからわかるように、ここではそうではありません。

助言がありますか?

4

3 に答える 3

1

私の質問への回答は、ここでも見つけることができます。RDL レポートで RDLC を使用する場合は? そしてここhttp://www.gotreportviewer.com/。それは基本的にこれです:

レポート サーバーとは異なり、ReportViewer コントロールはデータベースに接続したり、クエリを実行したりしません。また、ローカル モードで使用できるエクスポート形式は、Excel、Word、および PDF のみです。(リモート モードでは、レポート サーバーでサポートされているすべての形式を使用できます。) ReportViewer コントロールは、カスタム レンダラーまたはカスタム レポート アイテムを追加して拡張することはできません。

詳細については、http://msdn.microsoft.com/en-us/library/ms252109(v=vs.80).aspxを参照してください。

.rdlc ファイルを処理する ReportViewer コントロールは、RDL の要素を無視します。レポート定義にクエリが含まれている場合、コントロールはそれを処理しません。

.rdl ファイルを .rdlc 形式に変換する場合は、レポート定義のデータ ソースとクエリ情報を、アプリケーションで提供されているデータ構造に手動で置き換える必要があります。

そのため、データを明示的にフェッチし、RDL ファイル内のデータセットとまったく同じ名前を持つように指定ReportViewerする必要があります。ReportDataSource

于 2013-01-24T07:54:48.543 に答える
0

データ ソースに資格情報が指定されているかどうかは、あなたが述べたことからわかりません。

ここのこの部分:

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

一般に SQL データ ソースで言えば、他のレポートやアプリケーションからレポートを表示できない場合は、アプリケーションを構築する IDE とは異なる資格情報をホスティング サーバーが想定していることが原因です。私の名前がブレットであるかどうか、リモートで呼び出すときに資格情報が実行されているかどうかはわかりません。レポートをホストしているサーバーで資格情報を指定すると、通常、これを回避できます。レポートをホストしているサーバーに入ります。これを行っているのは、「rdl」レポートと rdlc レポートがあるためだと思います。データソースを見つけてプロパティをクリックし、設定を「これらの資格情報を使用する」に変更します。機能することがわかっている資格情報を提供します。

これで問題が解決する場合があります。SharePoint 接続と XML 接続についてはよくわかりませんが、これは SQL Server 接続の表示の問題でよく見られます。

于 2013-01-23T16:16:40.587 に答える
0

同様のことを行う小さなコマンド ライン アプリがありますが、レポート パスを定義してからレポート ビューアーで何かを実行するまでの間に、レポートを実行するためのデータ ソースを設定しています。

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>
于 2013-01-23T14:53:23.397 に答える