32

レポート ウィザードを使用して VS 2012 で .rdlc-Report を作成し、データ ソースとデータセットを追加しました。以下のコードを使用してレポートを表示しようとすると、次のエラー メッセージが表示されます。

データセット 'DataSet1' のデータ リーダーを作成できません。

bytes = localReport.Render("PDF", sdeviceinfo, out smimetype, out sencoding, out sfilenameextension, out streamids, out myWarnings);
4

11 に答える 11

14

私の「落とし穴」は、DataSet が Dataset と同じではないという発見でした。

于 2015-05-15T18:31:55.867 に答える
2

ReportViewer を作成できず、真のデータセットを提供できません。パラメータ提供技術が原因でエラーが発生している可能性があります

このように試すことができます。私はこの方法を使用して解決しました:

   protected void btnPdf_Click(object sender, EventArgs e)
    {
    ReportViewer viwer = new ReportViewer();
    ObjectDataSource ob = new ObjectDataSource("dataset.YourTableAdapter", "GetData");
    dataset.YourTableAdapter ds = new dataset.YourTableAdapter();

    string PDF = "PDF";
    string ReportType = "ReportType";
    Warning[] warnings = null;
    string[] streamIds = null;
    string mimeType = string.Empty;
    string encoding = string.Empty;
    string extension = string.Empty;
    string filetype = string.Empty;

   

    viwer.SizeToReportContent = true;
    viwer.LocalReport.ReportPath = "reports/report/report.rdlc";
    viwer.ProcessingMode = ProcessingMode.Local;
    ob.SelectParameters.Clear();
    ob.SelectParameters.Add(QueryStringEnum.CompanyID, CurrentCompanyID.ToString());
 
    ReportDataSource rds = new ReportDataSource("datasetname", (object) ds.GetData((long?)CurrentCompanyID.ToInt64());

    viwer.LocalReport.DataSources.Add(rds);
    viwer.LocalReport.Refresh();

    byte[] bytes = viwer.LocalReport.Render("PDF", null,
     out mimeType, out encoding, out extension, out streamIds, out warnings);
   



}
于 2014-09-11T12:48:13.897 に答える
1
  1. 管理者モードで実行していて、SSRSサーバーにアクセスできることを確認してください。

  2. 正しいデータセット名を設定したかどうか、または適切にロードして割り当てているかどうかを確認してください。

MSDNでこのサンプルを確認してください。

于 2013-03-12T17:14:27.280 に答える
0

問題を解決しました-私のコーディングエラー-次のように、SqlServerDataSourceのaspxコードから「適切な」パラメーター値を省略しました...

parameter-name="p_CSV_VEHICLES" の DefaultValue がないことに注意してください

AND (判明) 2 つのパラメーター (="p_CSV_VGROUPS" および ="p_CSV_VEHICLES") は、デフォルト値として空の文字列 "" を渡すことができませんでした。これら 2 つのパラメーターの選択コンテ​​キストでは、空の文字列は無効です。

DefaultValue を追加し、DefaultValue(s) を各パラメーターの有効な文字列値に設定した後、レポートは Web ページの ReportViewer コントロールに完全に表示されました。

元の (動作していない) aspx コードを次に示します。

     <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:FCI_WebMainConnectionString %>" 
        SelectCommand="uspRPT_CostDetailFleet" SelectCommandType="StoredProcedure">
        <SelectParameters>
           <asp:Parameter DefaultValue="5" Name="p_UID_DIVISION" Type="Int32" />
           <asp:Parameter DefaultValue="85" Name="p_UID_CUSTOMER" Type="Int32" />
           <asp:Parameter DefaultValue="FCIFLEETGRP" Name="p_SORT_ORDER" Type="String" />
           <asp:Parameter DefaultValue="" Name="p_CSV_VGROUPS" Type="String" />
           <asp:Parameter Name="p_CSV_VEHICLES" Type="String" />
           <asp:Parameter DbType="Date" DefaultValue="#01/01/2013#" Name="p_dtStart0" />
           <asp:Parameter DbType="Date" DefaultValue="#12/31/2013#" Name="p_dtEnd0" />
        </SelectParameters>
     </asp:SqlDataSource>
于 2015-12-28T22:55:22.270 に答える
0

DataSet 名が正しいかどうかを確認してください。

 reportDataSource = new ReportDataSource
    {
       Name = "DataSet1",// Check This Line. Are You Sure DataSet Name is Correct?
       Value = ListData 
    };
于 2019-03-11T10:56:28.480 に答える
0

ソースコードを共有することはできませんが、役立つ回答を提出したかったのです。

以前作成したレポートを既存のコードベースからコピーしました。既存のレポートをコピーしたため、Visual Studio の [レポート データ] ビューにデータセットが既に作成されています。この既存のレポートの大部分が必要でした。ただし、データセットの 1 つを削除し、新しいレポートに必要な新しいデータを格納する、作成した新しいデータセットに置き換えました。

ここで犯した大きな間違いは、古いデータセットとまったく同じ名前にした新しいデータセットの名前を変更したと思ったことです。古いデータセットは「ReportDetail」という名前でした。しかし、私が新しく作成したものは、「ReportDetails」に「s」を付けた名前でした。

古いデータセットのデータ フィールドがいくつか必要でした。ただし、これらの古いフィールドがコピーされたレポートに古いデータセット名でまだ残っていることに気付きませんでした。そのため、レポートにはまだ「ReportDetail.{fieldName}」というフィールドがありました。これが最終的に問題を呼んでいたものでした。

.rdlc レポートの XML バージョンを開くと、古いデータセット名がまだ使用されていることがはっきりとわかりました。その古いデータセットはもう存在しないため、このエラーがスローされていました。フィールドを反転して新しいデータセット名を使用すると、正しく機能しました。

于 2021-01-13T19:50:05.043 に答える